KaliVeda
Toolkit for HIC analysis
SQLiteDB.h
1 
4 #ifndef __SQLITEDB_H
5 #define __SQLITEDB_H
6 
7 #include "KVSQLiteServer.h"
8 #include "TSQLStatement.h"
9 #include "TSQLResult.h"
10 #include "KVConfig.h"
11 #include <utility>
12 #include <iostream>
13 #include <unordered_map>
14 #include <list>
15 #include <map>
16 #include <KVNameValueList.h>
17 #include <KVNumberList.h>
18 #include "TGraph.h"
19 
20 namespace KVSQLite {
21 
31  namespace column_type {
32  enum types {
37  BLOB
38  };
39  }
40  namespace insert_mode {
41  enum types {
45  REPLACE
46  };
47  }
48 
51 
52  class table;
53 
54  class column {
61  friend class table;
62  friend class database;
63 
64  std::pair<TString, KVSQLite_column_type> fNameType; //name & type of column
65  TString fConstraint;//column constraint
66  int fIndex;//index of column
67  static std::map<KVSQLite::column_type::types, TString> inv_type_map;
68  mutable KVNamedParameter fData; // data item in column
69  bool has_data;
70  mutable void* fBlob;
71  mutable Long_t fBlobSize;// size of blob
72  bool fIsROWIDAlias;// true if column is INTEGER PRIMARY KEY
73  mutable bool fIsNull;//for inserting NULL values
74  TString fTable;// name of parent table
75 
76  void init_type_map();
77  TString _type();
78 
80  : fNameType(name, type), fConstraint(""), fIndex(idx), fData(name),
81  has_data(false), fBlob(nullptr), fBlobSize(0),
82  fIsROWIDAlias(false), fIsNull(false)
83  {
84  if (!inv_type_map.size()) init_type_map();
85  }
86  public:
87  enum class default_time {
91  };
92  virtual ~column()
93  {
95  if (fBlob) delete[](unsigned char*)fBlob;
96  }
97 
98  const char* name() const
99  {
100  return fNameType.first;
101  }
102  TString Name() const
103  {
104  return fNameType.first;
105  }
107  {
108  return fNameType.second;
109  }
111  {
112  return const_cast<column*>(this)->_type();
113  }
114  TString get_declaration() const;
116  {
118  return fTable;
119  }
120  void set_table(const TString& name)
121  {
123  fTable = name;
124  }
125  int index() const
126  {
127  return fIndex;
128  }
129 
130  void print() const
131  {
132  std::cout << fIndex << "\t" << name() << "\t" << TypeName() << "\n";
133  }
134  template<typename T>
135  void set_data(const T& x)
136  {
137  fData.Set(x);
138  fIsNull = false;
139  has_data = true;
140  }
141  template <typename T>
142  const column& operator=(const T& x)
143  {
145  set_data(x);
146  return *this;
147  }
148 
149  void set_null()
150  {
151  fIsNull = true;
152  }
153  bool is_null() const
154  {
155  return fIsNull;
156  }
157 
158  template<typename T>
159  void set_binary_data(T& x)
160  {
161  fBlob = (void*)&x;
162  fBlobSize = sizeof(x);
163  fIsNull = false;
164  }
165  template<typename T>
166  void set_binary_data(T* x)
167  {
168  fBlob = (void*)x;
169  fBlobSize = sizeof(*x);
170  fIsNull = false;
171  }
172 
173  void set_data_in_statement(TSQLStatement*, int idx = -1) const;
174  void set_data_from_statement(TSQLStatement* s, int idx = -1) const;
175  void set_constraint(const TString& c)
176  {
184  fConstraint = c;
185  }
187  {
189  if (fConstraint.IsNull()) fConstraint = "UNIQUE";
190  else fConstraint += " UNIQUE";
191  return *this;
192  }
194  {
196  if (fConstraint.IsNull()) fConstraint = "NOT NULL";
197  else fConstraint += " NOT NULL";
198  return *this;
199  }
201  {
203  TString defs = "DEFAULT ";
204  switch (t) {
206  defs += "CURRENT_DATE";
207  break;
209  defs += "CURRENT_TIME";
210  break;
212  defs += "CURRENT_TIMESTAMP";
213  }
214  if (fConstraint.IsNull()) fConstraint = defs;
215  else fConstraint += " " + defs;
216  return *this;
217  }
218  column& DEFAULT(int i)
219  {
221  TString defs = Form("DEFAULT %d", i);
222  if (fConstraint.IsNull()) fConstraint = defs;
223  else fConstraint += " " + defs;
224  return *this;
225  }
226  column& DEFAULT(double d)
227  {
229  TString defs = Form("DEFAULT %f", d);
230  if (fConstraint.IsNull()) fConstraint = defs;
231  else fConstraint += " " + defs;
232  return *this;
233  }
234  column& DEFAULT(const TString& s)
235  {
237  TString defs = Form("DEFAULT %s", s.Data());
238  if (fConstraint.IsNull()) fConstraint = defs;
239  else fConstraint += " " + defs;
240  return *this;
241  }
242  const KVNamedParameter& data() const
243  {
244  return fData;
245  }
246  template <typename T>
247  T get_data() const
248  {
249  return fData.Get<T>();
250  }
251  template<typename T>
252  T* binary_data() const
253  {
254  return static_cast<T*>(fBlob);
255  }
256  bool rowid_alias() const
257  {
258  return fIsROWIDAlias;
259  }
261  {
262  fIsROWIDAlias = true;
263  }
265 
266  ClassDef(column, 0) //Column in an SQLite database table
267  };
268  template<> void column::set_data(const KVNamedParameter&);
269 
270  class database;
271 
273  friend class table;
274  friend class database;
275 
277  bool back_reference = false;
278  public:
282  foreign_key_constraint(const TString& chk, const TString& pt, const TString& pk = "", bool back_ref = false)
283  : child_key(chk), parent_table(pt), parent_key(pk), back_reference(back_ref)
284  {}
285  bool is_back_reference() const
286  {
287  return back_reference;
288  }
290  };
291 
292  class table {
299  friend class database;
300  database* fDB = nullptr;
301  TString fName;//name of table
303  mutable std::vector<KVSQLite::column> fColumns;//list of columns
304  mutable std::unordered_map<std::string, int> fColMap; //map name of column to index
305  static std::map<TString, KVSQLite::column_type::types> type_map;
306  TString fPrimaryKey; // primary key column(s) if required
307  std::vector<foreign_key_constraint> fForeignKeys;
308  bool fTemp;//temporary table?
309 
310  void init_type_map();
312 
313  public:
314  table(const TString& Name, const std::vector<KVSQLite::column>& cols)
315  : fName(Name), fInsert(KVSQLite::insert_mode::DEFAULT), fColumns(cols), fColMap(), fTemp(false)
316  {
317  if (!type_map.size()) init_type_map();
318  for (auto& c : fColumns) c.set_table(Name);
319  }
320  table(const TString& Name = "")
321  : table(Name, {})
322  {}
323  table(const table& other)
324  : fDB(other.fDB), fName(other.fName), fInsert(other.fInsert), fColumns(other.fColumns), fColMap(other.fColMap),
326  {}
327  virtual ~table() {}
328 
329  const char* name() const
330  {
331  return fName;
332  }
333  void set_name(const TString& name)
334  {
335  fName = name;
336  }
338 
339  void show_columns() const;
341  {
356  fInsert = i;
357  }
358  const char* get_insert_command() const;
359  void set_temporary(bool temp = true)
360  {
362  fTemp = temp;
363  }
364  bool is_temporary() const
365  {
366  return fTemp;
367  }
368 
371  {
373  return add_column(KVSQLite::column(fColumns.size(), name, type));
374  }
375  column& add_column(const TString& name, const TString& type);
376  void foreign_key(const TString& child_key, const TString& parent_table, const TString& parent_key);
377  const KVSQLite::column& operator[](int i) const
378  {
379  return fColumns[i];
380  }
382  {
383  return fColumns[i];
384  }
386  {
387  return fColumns[i];
388  }
389  bool has_column(const TString& name) const
390  {
392  return fColMap.count(name.Data());
393  }
394 
396  {
397  return get_column(n);
398  }
399  const KVSQLite::column& operator[](const TString& n) const
400  {
401  return const_cast<table*>(this)->get_column(n);
402  }
404  {
405  if (!has_column(n)) {
406  TString what = "Error in <KVSQLite::table::get_column(const TString&)> : "
407  + n + " is not a column of table " + name();
408  throw std::runtime_error(what.Data());
409  }
410  return fColumns[fColMap[n.Data()]];
411  }
412 
413  void print() const
414  {
415  std::cout << name() << "\n";
416  for (std::vector<KVSQLite::column>::const_iterator it = fColumns.begin(); it != fColumns.end(); ++it) it->print();
417  }
418  int number_of_columns() const
419  {
420  return fColumns.size();
421  }
422  int check_columns(const KVNameValueList&);
423  void prepare_data(const KVNameValueList&, const KVNamedParameter* = nullptr);
424  void set_all_columns_null();
425 
426  TString get_column_names(const TString& exclude = "", const TString& delim = ",") const;
427 
428  void primary_key(const TString& cols)
429  {
447 
448  fPrimaryKey = cols.Strip(TString::kBoth, ' ');
449  if (!fPrimaryKey.Contains(",")) {
450  if (get_column(fPrimaryKey).type() == KVSQLite_column_type::INTEGER)
452  }
453  }
454  bool has_primary_key() const
455  {
456  return !fPrimaryKey.IsNull();
457  }
458  bool has_foreign_keys(bool ignore_back_references = true) const
459  {
460  if (!ignore_back_references) return !fForeignKeys.empty();
461  for (auto& f : fForeignKeys)
462  if (!f.back_reference) // ignore back-references from foreign keys in other tables
463  return true;
464  return false;
465  }
466 
468  void insert_single_row();
469 
470  ClassDef(table, 0) //Table in an SQLite database
471  };
472 
473  class database {
474  std::unique_ptr<KVSQLiteServer> fDBserv; //connection to database
475  mutable std::unordered_map<std::string, KVSQLite::table> fTables; //map of tables in database
476  mutable std::unique_ptr<TSQLStatement> fSQLstmt; //used for bulk operations
477  mutable std::list<const column*> fSQLstmtCols; // columns used in SQL statement
478  mutable table* fBulkTable; //pointer to table currently used with fSQLstmt
479  mutable bool fInserting;
480  mutable bool fSelecting;
481  mutable bool fEmptyResultSet;
482  bool fIsValid;
484 
485  void PrintResults(TSQLResult* tabent, int column_width = 20) const;
486  std::unique_ptr<TSQLResult> SelectRowsFromTable(
487  const TString& table,
488  const TString& columns = "*",
489  const TString& condition = "") const;
490 
491  void read_table_infos();
492  std::list<const table*> generate_table_selection_string(const TString& tables, KVString& table_selection) const;
494 
496  public:
497  static bool debug;
498  database() : fDBserv(nullptr), fTables(), fSQLstmt(nullptr), fBulkTable(nullptr), fInserting(false), fSelecting(false), fIsValid(false) {}
499  database(const TString& dbfile) : fDBserv(nullptr), fTables(), fSQLstmt(nullptr), fBulkTable(nullptr), fInserting(false), fSelecting(false), fIsValid(false)
500  {
501  open(dbfile);
502  }
503  database(const database& db) : fDBserv(nullptr), fTables(), fSQLstmt(nullptr), fBulkTable(nullptr), fInserting(false), fSelecting(false), fIsValid(false)
504  {
510  if (db.good()) open(db.fDBserv->GetDB());
511  }
513  {
514  if (&db != this && db.good()) open(db.fDBserv->GetDB());
515  return *this;
516  }
517  void show_tables() const;
519  {
520  return fTables.size();
521  }
522  virtual ~database()
523  {
524  close();
525  }
526  bool is_inserting() const
527  {
531  return fInserting;
532  }
533 
534  void open(const TString& dbfile);
535  void close()
536  {
537  fDBserv->Close();
538  fTables.clear();
539  }
540  bool good() const
541  {
542  return fIsValid;
543  }
544 
545  bool is_open() const
546  {
547  return fDBserv->IsConnected();
548  }
549 
550  void Dump() const;
551 
552  table& add_table(const table&);
553  bool has_table(const TString& table)
554  {
556  return fTables.count(table.Data());
557  }
558 
560  {
561  return get_table(name);
562  }
563  const KVSQLite::table& operator[](const TString& name) const
564  {
565  return const_cast<database*>(this)->get_table(name);
566  }
568  {
569  if (!fTables.count(name.Data())) {
570  std::cout << "Error in <KVSQLite::database::get_table(const TString&)> : "
571  << name << " is not a table of database" << std::endl;
572  return fTables.begin()->second;
573  }
574  return fTables[name.Data()];
575  }
576 
577  bool execute(const TString& sql_statement)
578  {
579  auto ret = fDBserv->Exec(sql_statement);
580  if(!ret && debug)
581  {
582  std::cerr << "database::execute : Exec(" << sql_statement <<
583  ") failed with code=" << fDBserv->GetErrorCode()
584  << " : " << fDBserv->GetErrorMsg() << std::endl;
585  }
586  return ret;
587  }
588  bool prepare_statement(const TString& query) const
589  {
590  auto stat = fDBserv->Statement(query);
591  if(!stat && debug)
592  {
593  std::cerr << "database::prepare_statement : Statement(" << query <<
594  ") failed with code=" << fDBserv->GetErrorCode()
595  << " : " << fDBserv->GetErrorMsg() << std::endl;
596  fSQLstmt.reset(nullptr);
597  return false;
598  }
599  else
600  fSQLstmt.reset(stat);
601  return true;
602  }
603  std::unique_ptr<TSQLResult> query(const TString& query) const
604  {
605  auto result = std::unique_ptr<TSQLResult>(fDBserv->Query(query));
606  if(!result && debug)
607  {
608  std::cerr << "database::query : Query(" << query <<
609  ") failed with code=" << fDBserv->GetErrorCode()
610  << " : " << fDBserv->GetErrorMsg() << std::endl;
611  }
612  return result;
613  }
614  bool prepare_data_insertion(const TString&);
615  void insert_data_row();
616  void end_data_insertion();
617 
618  bool get_next_result() const;
619  KVNumberList get_integer_list(const TString& tables, const TString& column,
620  const TString& selection = "", const TString& anything_else = "");
621  TString get_string_list(const TString& tables, const TString& column,
622  const TString& selection = "", const TString& anything_else = "");
623  KVNameValueList get_name_value_list(const TString& table, const TString& name_column, const TString& value_column,
624  const TString& selection = "", const TString& anything_else = "");
625  TGraph* create_graph(const TString& tablename, const TString& Xcolumn, const TString& Ycolumn, const TString& selection = "");
626 
627  void clear_table(const TString& name);
628 
629  bool select_data(const TString& tables, const TString& columns = "*", const TString& selection = "",
630  bool distinct = false, const TString& anything_else = "") const;
631  int count(const TString& tables, const TString& column = "*", const TString& selection = "", bool distinct = false, const TString& anything_else = "") const;
632  bool update(const TString& table, const TString& columns, const TString& selection = "");
633  void delete_rows_in_table(const TString& table, const TString& selection = "");
634 
635  column& add_column(const TString& table, const TString& name, const TString& type);
636  void add_missing_columns(const TString& table, const KVNameValueList& l);
637 
638  void copy_table_data(const TString& source, const TString& destination, const TString& columns = "*", const TString& selection = "");
639  void print_selection(const TString& table, const TString& columns, const TString& condition, int column_width = 20) const;
640  void print_selected_data(const TString& tables, const TString& columns = "*", const TString& selection = "", bool distinct = false, const TString& anything_else = "");
641 
642  void delete_table(const TString& table);
645 
647  {
650  return count_column.get_data<int>();
651  }
652  ClassDef(database, 0) //Interface to ROOT SQLite database backend
653  };
654 }
655 
656 #endif
long Long_t
#define d(i)
#define f(i)
#define c(i)
#define ClassDef(name, id)
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
char name[80]
char * Form(const char *fmt,...)
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
A generic named parameter storing values of different types.
void Set(const char *, const char *)
Strings used to represent a set of ranges of values.
Definition: KVNumberList.h:85
Long_t fBlobSize
binary data
Definition: SQLiteDB.h:71
void init_type_map()
Definition: SQLiteDB.cpp:1362
bool is_null() const
Definition: SQLiteDB.h:153
void set_rowidalias()
Definition: SQLiteDB.h:260
void * fBlob
Definition: SQLiteDB.h:70
void set_null()
Definition: SQLiteDB.h:149
void set_binary_data(T &x)
Definition: SQLiteDB.h:159
TString _type()
Definition: SQLiteDB.cpp:1375
void set_data_from_statement(TSQLStatement *s, int idx=-1) const
Definition: SQLiteDB.cpp:1443
void set_table(const TString &name)
Definition: SQLiteDB.h:120
std::pair< TString, KVSQLite_column_type > fNameType
Definition: SQLiteDB.h:64
column & UNIQUE()
Definition: SQLiteDB.h:186
const column & operator=(const T &x)
Definition: SQLiteDB.h:142
TString get_declaration() const
Definition: SQLiteDB.cpp:503
static std::map< KVSQLite::column_type::types, TString > inv_type_map
Definition: SQLiteDB.h:67
void set_data_in_statement(TSQLStatement *, int idx=-1) const
Definition: SQLiteDB.cpp:1399
const char * name() const
Definition: SQLiteDB.h:98
column & NOT_NULL()
Definition: SQLiteDB.h:193
KVNamedParameter fData
Definition: SQLiteDB.h:68
column & DEFAULT(default_time t)
Definition: SQLiteDB.h:200
T get_data() const
Definition: SQLiteDB.h:247
KVSQLite_column_type type() const
Definition: SQLiteDB.h:106
column & DEFAULT(const TString &s)
Definition: SQLiteDB.h:234
int index() const
Definition: SQLiteDB.h:125
bool fIsROWIDAlias
Definition: SQLiteDB.h:72
bool rowid_alias() const
Definition: SQLiteDB.h:256
TString get_data_string_for_insert()
Definition: SQLiteDB.cpp:1489
void set_binary_data(T *x)
Definition: SQLiteDB.h:166
T * binary_data() const
Definition: SQLiteDB.h:252
column & DEFAULT(int i)
Definition: SQLiteDB.h:218
TString fConstraint
Definition: SQLiteDB.h:65
const KVNamedParameter & data() const
Definition: SQLiteDB.h:242
void set_data(const T &x)
Definition: SQLiteDB.h:135
TString Name() const
Definition: SQLiteDB.h:102
TString fTable
Definition: SQLiteDB.h:74
TString get_table() const
Definition: SQLiteDB.h:115
void print() const
Definition: SQLiteDB.h:130
virtual ~column()
Definition: SQLiteDB.h:92
column(int idx, const TString &name, KVSQLite_column_type type)
Definition: SQLiteDB.h:79
void set_constraint(const TString &c)
Definition: SQLiteDB.h:175
TString TypeName() const
Definition: SQLiteDB.h:110
column & DEFAULT(double d)
Definition: SQLiteDB.h:226
Interface to ROOT SQLite database backend.
Definition: SQLiteDB.h:473
int get_number_of_tables() const
Definition: SQLiteDB.h:518
void copy_table_data(const TString &source, const TString &destination, const TString &columns="*", const TString &selection="")
Definition: SQLiteDB.cpp:1333
std::list< const column * > fSQLstmtCols
Definition: SQLiteDB.h:477
database(const TString &dbfile)
Definition: SQLiteDB.h:499
table & add_table(const table &)
Definition: SQLiteDB.cpp:258
TGraph * create_graph(const TString &tablename, const TString &Xcolumn, const TString &Ycolumn, const TString &selection="")
Definition: SQLiteDB.cpp:1069
std::unique_ptr< TSQLResult > SelectRowsFromTable(const TString &table, const TString &columns="*", const TString &condition="") const
Definition: SQLiteDB.cpp:38
std::unique_ptr< TSQLStatement > fSQLstmt
Definition: SQLiteDB.h:476
int get_count_column_value() const
Definition: SQLiteDB.h:646
bool update(const TString &table, const TString &columns, const TString &selection="")
Definition: SQLiteDB.cpp:1182
KVString double_quote_all_tables_and_columns(const TString &) const
Definition: SQLiteDB.cpp:753
void show_tables() const
print list of tables
Definition: SQLiteDB.cpp:103
const KVSQLite::table & operator[](const TString &name) const
Definition: SQLiteDB.h:563
void insert_data_row_selected_columns()
Definition: SQLiteDB.cpp:580
void delete_table(const TString &table)
Definition: SQLiteDB.cpp:1240
column & add_column(const TString &table, const TString &name, const TString &type)
Definition: SQLiteDB.cpp:1285
void print_selection(const TString &table, const TString &columns, const TString &condition, int column_width=20) const
Print on stdout contents of database.
Definition: SQLiteDB.cpp:229
bool good() const
Definition: SQLiteDB.h:540
static bool debug
Definition: SQLiteDB.h:497
void delete_rows_in_table(const TString &table, const TString &selection="")
Definition: SQLiteDB.cpp:1262
std::list< const table * > generate_table_selection_string(const TString &tables, KVString &table_selection) const
Definition: SQLiteDB.cpp:712
bool execute(const TString &sql_statement)
Definition: SQLiteDB.h:577
database & operator=(const database &db)
Definition: SQLiteDB.h:512
KVNumberList get_integer_list(const TString &tables, const TString &column, const TString &selection="", const TString &anything_else="")
Definition: SQLiteDB.cpp:990
KVSQLite::table & operator[](const TString &name)
Definition: SQLiteDB.h:559
bool is_inserting() const
Definition: SQLiteDB.h:526
void insert_data_row()
Definition: SQLiteDB.cpp:533
void open(const TString &dbfile)
Definition: SQLiteDB.cpp:125
bool has_table(const TString &table)
Definition: SQLiteDB.h:553
void end_data_insertion()
Definition: SQLiteDB.cpp:620
bool select_data(const TString &tables, const TString &columns="*", const TString &selection="", bool distinct=false, const TString &anything_else="") const
Definition: SQLiteDB.cpp:835
std::unique_ptr< KVSQLiteServer > fDBserv
Definition: SQLiteDB.h:474
KVNameValueList get_name_value_list(const TString &table, const TString &name_column, const TString &value_column, const TString &selection="", const TString &anything_else="")
Definition: SQLiteDB.cpp:1045
virtual ~database()
Definition: SQLiteDB.h:522
bool get_next_result() const
Definition: SQLiteDB.cpp:954
bool prepare_data_insertion_selected_columns(const TString &table)
Definition: SQLiteDB.cpp:399
void Dump() const
Print on stdout contents of database.
Definition: SQLiteDB.cpp:208
std::unordered_map< std::string, KVSQLite::table > fTables
Definition: SQLiteDB.h:475
column count_column
Definition: SQLiteDB.h:495
database(const database &db)
Definition: SQLiteDB.h:503
TString get_string_list(const TString &tables, const TString &column, const TString &selection="", const TString &anything_else="")
Definition: SQLiteDB.cpp:1016
void PrintResults(TSQLResult *tabent, int column_width=20) const
Definition: SQLiteDB.cpp:180
KVSQLite::table & get_table(const TString &name)
Definition: SQLiteDB.h:567
bool prepare_data_insertion(const TString &)
Definition: SQLiteDB.cpp:307
TString fSelectedColumns
Definition: SQLiteDB.h:483
void clear_table(const TString &name)
Delete all rows in table, but does not remove table.
Definition: SQLiteDB.cpp:1093
void print_selected_data(const TString &tables, const TString &columns="*", const TString &selection="", bool distinct=false, const TString &anything_else="")
Print out results of a call to select_data().
Definition: SQLiteDB.cpp:646
table * fBulkTable
Definition: SQLiteDB.h:478
void read_table_infos()
initialise map of database tables from existing database
Definition: SQLiteDB.cpp:55
bool is_open() const
Definition: SQLiteDB.h:545
int count(const TString &tables, const TString &column="*", const TString &selection="", bool distinct=false, const TString &anything_else="") const
Definition: SQLiteDB.cpp:1124
void add_missing_columns(const TString &table, const KVNameValueList &l)
Definition: SQLiteDB.cpp:1300
std::unique_ptr< TSQLResult > query(const TString &query) const
Definition: SQLiteDB.h:603
bool prepare_statement(const TString &query) const
Definition: SQLiteDB.h:588
foreign_key_constraint(const foreign_key_constraint &)=default
foreign_key_constraint(const TString &chk, const TString &pt, const TString &pk="", bool back_ref=false)
Definition: SQLiteDB.h:282
foreign_key_constraint(foreign_key_constraint &&)=default
static std::map< TString, KVSQLite::column_type::types > type_map
Definition: SQLiteDB.h:305
const char * name() const
Definition: SQLiteDB.h:329
bool has_foreign_keys(bool ignore_back_references=true) const
Definition: SQLiteDB.h:458
bool is_temporary() const
Definition: SQLiteDB.h:364
void primary_key(const TString &cols)
Definition: SQLiteDB.h:428
KVSQLite::column & operator[](int i)
Definition: SQLiteDB.h:381
void print() const
Definition: SQLiteDB.h:413
void set_all_columns_null()
set the value of all columns in the table to NULL
Definition: SQLiteDB.cpp:1763
std::vector< KVSQLite::column > fColumns
Definition: SQLiteDB.h:303
void set_temporary(bool temp=true)
Definition: SQLiteDB.h:359
table(const table &other)
Definition: SQLiteDB.h:323
void show_columns() const
print list of columns
Definition: SQLiteDB.cpp:1603
void init_type_map()
Definition: SQLiteDB.cpp:1508
bool has_primary_key() const
Definition: SQLiteDB.h:454
TString fPrimaryKey
Definition: SQLiteDB.h:306
void foreign_key(const TString &child_key, const TString &parent_table, const TString &parent_key)
Definition: SQLiteDB.cpp:1674
table(const TString &Name, const std::vector< KVSQLite::column > &cols)
Definition: SQLiteDB.h:314
void set_foreign_key_back_references()
Definition: SQLiteDB.cpp:1525
TString get_column_names(const TString &exclude="", const TString &delim=",") const
Definition: SQLiteDB.cpp:1779
table(const TString &Name="")
Definition: SQLiteDB.h:320
column & add_column(const KVSQLite::column &c)
Definition: SQLiteDB.cpp:1623
void set_name(const TString &name)
Definition: SQLiteDB.h:333
TString fName
Definition: SQLiteDB.h:301
KVSQLite::column & get_column(const TString &n)
Definition: SQLiteDB.h:403
KVSQLite::column & operator[](const TString &n)
Definition: SQLiteDB.h:395
virtual ~table()
Definition: SQLiteDB.h:327
int check_columns(const KVNameValueList &)
Definition: SQLiteDB.cpp:1718
void set_insert_mode(KVSQLite_insert_mode i)
Definition: SQLiteDB.h:340
int number_of_columns() const
Definition: SQLiteDB.h:418
database * fDB
Definition: SQLiteDB.h:300
const KVSQLite::column & operator[](const TString &n) const
Definition: SQLiteDB.h:399
TString get_table_creation_command() const
Definition: SQLiteDB.cpp:1551
bool has_column(const TString &name) const
Definition: SQLiteDB.h:389
KVSQLite::column & get_column(int i)
Definition: SQLiteDB.h:385
void prepare_insert_single_row()
Definition: SQLiteDB.cpp:1810
column & add_column(const TString &name, KVSQLite_column_type type)
Definition: SQLiteDB.h:370
void prepare_data(const KVNameValueList &, const KVNamedParameter *=nullptr)
Definition: SQLiteDB.cpp:1741
const char * get_insert_command() const
Definition: SQLiteDB.cpp:476
KVSQLite_insert_mode fInsert
Definition: SQLiteDB.h:302
std::vector< foreign_key_constraint > fForeignKeys
Definition: SQLiteDB.h:307
void insert_single_row()
use to add single row data to table. see prepare_insert_single_row() for usage.
Definition: SQLiteDB.cpp:1829
const KVSQLite::column & operator[](int i) const
Definition: SQLiteDB.h:377
std::unordered_map< std::string, int > fColMap
Definition: SQLiteDB.h:304
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
Definition: KVString.h:73
TSubString Strip(EStripType s=kTrailing, char c=' ') const
const char * Data() const
Bool_t IsNull() const
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
TPaveText * pt
RooCmdArg Name(const char *name)
Double_t x[n]
const Int_t n
KVSQLite::column_type::types KVSQLite_column_type
Definition: SQLiteDB.h:50
KVSQLite::insert_mode::types KVSQLite_insert_mode
Definition: SQLiteDB.h:49
double T(double x)