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  }
110  const char* type_name() const
111  {
112  return const_cast<column*>(this)->_type();
113  }
115  {
116  return const_cast<column*>(this)->_type();
117  }
118  TString get_declaration() const;
120  {
122  return fTable;
123  }
124  void set_table(const TString& name)
125  {
127  fTable = name;
128  }
129  int index() const
130  {
131  return fIndex;
132  }
133 
134  void print() const
135  {
136  std::cout << fIndex << "\t" << name() << "\t" << type_name() << "\n";
137  }
138  template<typename T>
139  void set_data(const T& x)
140  {
141  fData.Set(x);
142  fIsNull = false;
143  has_data = true;
144  }
145  template <typename T>
146  const column& operator=(const T& x)
147  {
149  set_data(x);
150  return *this;
151  }
152 
153  void set_null()
154  {
155  fIsNull = true;
156  }
157  bool is_null() const
158  {
159  return fIsNull;
160  }
161 
162  template<typename T>
163  void set_binary_data(T& x)
164  {
165  fBlob = (void*)&x;
166  fBlobSize = sizeof(x);
167  fIsNull = false;
168  }
169  template<typename T>
170  void set_binary_data(T* x)
171  {
172  fBlob = (void*)x;
173  fBlobSize = sizeof(*x);
174  fIsNull = false;
175  }
176 
177  void set_data_in_statement(TSQLStatement*, int idx = -1) const;
178  void set_data_from_statement(TSQLStatement* s, int idx = -1) const;
179  void set_constraint(const TString& c)
180  {
188  fConstraint = c;
189  }
191  {
193  if (fConstraint.IsNull()) fConstraint = "UNIQUE";
194  else fConstraint += " UNIQUE";
195  return *this;
196  }
198  {
200  if (fConstraint.IsNull()) fConstraint = "NOT NULL";
201  else fConstraint += " NOT NULL";
202  return *this;
203  }
205  {
207  TString defs = "DEFAULT ";
208  switch (t) {
210  defs += "CURRENT_DATE";
211  break;
213  defs += "CURRENT_TIME";
214  break;
216  defs += "CURRENT_TIMESTAMP";
217  }
218  if (fConstraint.IsNull()) fConstraint = defs;
219  else fConstraint += " " + defs;
220  return *this;
221  }
222  column& DEFAULT(int i)
223  {
225  TString defs = Form("DEFAULT %d", i);
226  if (fConstraint.IsNull()) fConstraint = defs;
227  else fConstraint += " " + defs;
228  return *this;
229  }
230  column& DEFAULT(double d)
231  {
233  TString defs = Form("DEFAULT %f", d);
234  if (fConstraint.IsNull()) fConstraint = defs;
235  else fConstraint += " " + defs;
236  return *this;
237  }
238  column& DEFAULT(const TString& s)
239  {
241  TString defs = Form("DEFAULT %s", s.Data());
242  if (fConstraint.IsNull()) fConstraint = defs;
243  else fConstraint += " " + defs;
244  return *this;
245  }
246  const KVNamedParameter& data() const
247  {
248  return fData;
249  }
250  template <typename T>
251  T get_data() const
252  {
253  return fData.Get<T>();
254  }
255  template<typename T>
256  T* binary_data() const
257  {
258  return static_cast<T*>(fBlob);
259  }
260  bool rowid_alias() const
261  {
262  return fIsROWIDAlias;
263  }
265  {
266  fIsROWIDAlias = true;
267  }
269 
270  ClassDef(column, 0) //Column in an SQLite database table
271  };
272  template<> void column::set_data(const KVNamedParameter&);
273 
274  class database;
275 
277  friend class table;
278  friend class database;
279 
281  bool back_reference = false;
282  public:
286  foreign_key_constraint(const TString& chk, const TString& pt, const TString& pk = "", bool back_ref = false)
287  : child_key(chk), parent_table(pt), parent_key(pk), back_reference(back_ref)
288  {}
289  bool is_back_reference() const
290  {
291  return back_reference;
292  }
294  };
295 
296  class table {
303  friend class database;
304  database* fDB = nullptr;
305  TString fName;//name of table
307  mutable std::vector<KVSQLite::column> fColumns;//list of columns
308  mutable std::unordered_map<std::string, int> fColMap; //map name of column to index
309  static std::map<TString, KVSQLite::column_type::types> type_map;
310  TString fPrimaryKey; // primary key column(s) if required
311  std::vector<foreign_key_constraint> fForeignKeys;
312  bool fTemp;//temporary table?
313 
314  void init_type_map();
316 
317  public:
318  table(const TString& Name, const std::vector<KVSQLite::column>& cols)
319  : fName(Name), fInsert(KVSQLite::insert_mode::DEFAULT), fColumns(cols), fColMap(), fTemp(false)
320  {
321  if (!type_map.size()) init_type_map();
322  for (auto& c : fColumns) c.set_table(Name);
323  }
324  table(const TString& Name = "")
325  : table(Name, {})
326  {}
327  table(const table& other)
328  : fDB(other.fDB), fName(other.fName), fInsert(other.fInsert), fColumns(other.fColumns), fColMap(other.fColMap),
330  {}
331  virtual ~table() {}
332 
333  const char* name() const
334  {
335  return fName;
336  }
337  void set_name(const TString& name)
338  {
339  fName = name;
340  }
342 
343  void show_columns() const;
345  {
360  fInsert = i;
361  }
362  const char* get_insert_command() const;
363  void set_temporary(bool temp = true)
364  {
366  fTemp = temp;
367  }
368  bool is_temporary() const
369  {
370  return fTemp;
371  }
372 
375  {
377  return add_column(KVSQLite::column(fColumns.size(), name, type));
378  }
379  column& add_column(const TString& name, const TString& type);
380  void foreign_key(const TString& child_key, const TString& parent_table, const TString& parent_key);
381  const KVSQLite::column& operator[](int i) const
382  {
383  return fColumns[i];
384  }
386  {
387  return fColumns[i];
388  }
390  {
391  return fColumns[i];
392  }
393  bool has_column(const TString& name) const
394  {
396  return fColMap.count(name.Data());
397  }
398 
400  {
401  return get_column(n);
402  }
403  const KVSQLite::column& operator[](const TString& n) const
404  {
405  return const_cast<table*>(this)->get_column(n);
406  }
408  {
409  if (!has_column(n)) {
410  std::cout << "Error in <KVSQLite::table::get_column(const TString&)> : "
411  << n << " is not a column of table " << name() << std::endl;
412  return fColumns[0];
413  }
414  return fColumns[fColMap[n.Data()]];
415  }
416 
417  void print() const
418  {
419  std::cout << name() << "\n";
420  for (std::vector<KVSQLite::column>::const_iterator it = fColumns.begin(); it != fColumns.end(); ++it) it->print();
421  }
422  int number_of_columns() const
423  {
424  return fColumns.size();
425  }
426  int check_columns(const KVNameValueList&);
427  void prepare_data(const KVNameValueList&, const KVNamedParameter* = nullptr);
428  void set_all_columns_null();
429 
430  TString get_column_names(const TString& exclude = "", const TString& delim = ",") const;
431 
432  void primary_key(const TString& cols)
433  {
451 
452  fPrimaryKey = cols.Strip(TString::kBoth, ' ');
453  if (!fPrimaryKey.Contains(",")) {
454  if (get_column(fPrimaryKey).type() == KVSQLite_column_type::INTEGER)
456  }
457  }
458  bool has_primary_key() const
459  {
460  return !fPrimaryKey.IsNull();
461  }
462  bool has_foreign_keys(bool ignore_back_references = true) const
463  {
464  if (!ignore_back_references) return !fForeignKeys.empty();
465  for (auto& f : fForeignKeys)
466  if (!f.back_reference) // ignore back-references from foreign keys in other tables
467  return true;
468  return false;
469  }
470 
472  void insert_single_row();
473 
474  ClassDef(table, 0) //Table in an SQLite database
475  };
476 
477  class database {
478  std::unique_ptr<KVSQLiteServer> fDBserv; //connection to database
479  mutable std::unordered_map<std::string, KVSQLite::table> fTables; //map of tables in database
480  mutable std::unique_ptr<TSQLStatement> fSQLstmt; //used for bulk operations
481  mutable std::list<const column*> fSQLstmtCols; // columns used in SQL statement
482  mutable table* fBulkTable; //pointer to table currently used with fSQLstmt
483  mutable bool fInserting;
484  mutable bool fSelecting;
485  mutable bool fEmptyResultSet;
486  bool fIsValid;
488 
489  void PrintResults(TSQLResult* tabent, int column_width = 20) const;
490  std::unique_ptr<TSQLResult> SelectRowsFromTable(
491  const TString& table,
492  const TString& columns = "*",
493  const TString& condition = "") const;
494 
495  void read_table_infos();
496  std::list<const table*> generate_table_selection_string(const TString& tables, KVString& table_selection) const;
498 
500  public:
501  static bool debug;
502  database() : fDBserv(nullptr), fTables(), fSQLstmt(nullptr), fBulkTable(nullptr), fInserting(false), fSelecting(false), fIsValid(false) {}
503  database(const TString& dbfile) : fDBserv(nullptr), fTables(), fSQLstmt(nullptr), fBulkTable(nullptr), fInserting(false), fSelecting(false), fIsValid(false)
504  {
505  open(dbfile);
506  }
507  database(const database& db) : fDBserv(nullptr), fTables(), fSQLstmt(nullptr), fBulkTable(nullptr), fInserting(false), fSelecting(false), fIsValid(false)
508  {
514  if (db.good()) open(db.fDBserv->GetDB());
515  }
517  {
518  if (&db != this && db.good()) open(db.fDBserv->GetDB());
519  return *this;
520  }
521  void show_tables() const;
523  {
524  return fTables.size();
525  }
526  virtual ~database()
527  {
528  close();
529  }
530  bool is_inserting() const
531  {
535  return fInserting;
536  }
537 
538  void open(const TString& dbfile);
539  void close()
540  {
541  fDBserv->Close();
542  fTables.clear();
543  }
544  bool good() const
545  {
546  return fIsValid;
547  }
548 
549  bool is_open() const
550  {
551  return fDBserv->IsConnected();
552  }
553 
554  void Dump() const;
555 
556  table& add_table(const table&);
557  bool has_table(const TString& table)
558  {
560  return fTables.count(table.Data());
561  }
562 
564  {
565  return get_table(name);
566  }
567  const KVSQLite::table& operator[](const TString& name) const
568  {
569  return const_cast<database*>(this)->get_table(name);
570  }
572  {
573  if (!fTables.count(name.Data())) {
574  std::cout << "Error in <KVSQLite::database::get_table(const TString&)> : "
575  << name << " is not a table of database" << std::endl;
576  return fTables.begin()->second;
577  }
578  return fTables[name.Data()];
579  }
580 
581  bool execute(const TString& sql_statement)
582  {
583  auto ret = fDBserv->Exec(sql_statement);
584  if(!ret && debug)
585  {
586  std::cerr << "database::execute : Exec(" << sql_statement <<
587  ") failed with code=" << fDBserv->GetErrorCode()
588  << " : " << fDBserv->GetErrorMsg() << std::endl;
589  }
590  return ret;
591  }
592  bool prepare_statement(const TString& query) const
593  {
594  auto stat = fDBserv->Statement(query);
595  if(!stat && debug)
596  {
597  std::cerr << "database::prepare_statement : Statement(" << query <<
598  ") failed with code=" << fDBserv->GetErrorCode()
599  << " : " << fDBserv->GetErrorMsg() << std::endl;
600  fSQLstmt.reset(nullptr);
601  return false;
602  }
603  else
604  fSQLstmt.reset(stat);
605  return true;
606  }
607  std::unique_ptr<TSQLResult> query(const TString& query) const
608  {
609  auto result = std::unique_ptr<TSQLResult>(fDBserv->Query(query));
610  if(!result && debug)
611  {
612  std::cerr << "database::query : Query(" << query <<
613  ") failed with code=" << fDBserv->GetErrorCode()
614  << " : " << fDBserv->GetErrorMsg() << std::endl;
615  }
616  return result;
617  }
618  bool prepare_data_insertion(const TString&);
619  void insert_data_row();
620  void end_data_insertion();
621 
622  bool get_next_result() const;
623  KVNumberList get_integer_list(const TString& tables, const TString& column,
624  const TString& selection = "", const TString& anything_else = "");
625  TString get_string_list(const TString& tables, const TString& column,
626  const TString& selection = "", const TString& anything_else = "");
627  KVNameValueList get_name_value_list(const TString& table, const TString& name_column, const TString& value_column,
628  const TString& selection = "", const TString& anything_else = "");
629  TGraph* create_graph(const TString& tablename, const TString& Xcolumn, const TString& Ycolumn, const TString& selection = "");
630 
631  void clear_table(const TString& name);
632 
633  bool select_data(const TString& tables, const TString& columns = "*", const TString& selection = "",
634  bool distinct = false, const TString& anything_else = "") const;
635  int count(const TString& tables, const TString& column = "*", const TString& selection = "", bool distinct = false, const TString& anything_else = "") const;
636  bool update(const TString& table, const TString& columns, const TString& selection = "");
637  void delete_data(const TString& table, const TString& selection = "");
638 
639  column& add_column(const TString& table, const TString& name, const TString& type);
640  void add_missing_columns(const TString& table, const KVNameValueList& l);
641 
642  void copy_table_data(const TString& source, const TString& destination, const TString& columns = "*", const TString& selection = "");
643  void print_selection(const TString& table, const TString& columns, const TString& condition, int column_width = 20) const;
644  void print_selected_data(const TString& tables, const TString& columns = "*", const TString& selection = "", bool distinct = false, const TString& anything_else = "");
645 
646  void delete_table(const TString& table);
649 
651  {
654  return count_column.get_data<int>();
655  }
656  ClassDef(database, 0) //Interface to ROOT SQLite database backend
657  };
658 }
659 
660 #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:157
void set_rowidalias()
Definition: SQLiteDB.h:264
void * fBlob
Definition: SQLiteDB.h:70
void set_null()
Definition: SQLiteDB.h:153
void set_binary_data(T &x)
Definition: SQLiteDB.h:163
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:124
const char * type_name() const
Definition: SQLiteDB.h:110
std::pair< TString, KVSQLite_column_type > fNameType
Definition: SQLiteDB.h:64
column & UNIQUE()
Definition: SQLiteDB.h:190
const column & operator=(const T &x)
Definition: SQLiteDB.h:146
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:197
KVNamedParameter fData
Definition: SQLiteDB.h:68
column & DEFAULT(default_time t)
Definition: SQLiteDB.h:204
T get_data() const
Definition: SQLiteDB.h:251
KVSQLite_column_type type() const
Definition: SQLiteDB.h:106
column & DEFAULT(const TString &s)
Definition: SQLiteDB.h:238
int index() const
Definition: SQLiteDB.h:129
bool fIsROWIDAlias
Definition: SQLiteDB.h:72
bool rowid_alias() const
Definition: SQLiteDB.h:260
TString get_data_string_for_insert()
Definition: SQLiteDB.cpp:1489
void set_binary_data(T *x)
Definition: SQLiteDB.h:170
T * binary_data() const
Definition: SQLiteDB.h:256
column & DEFAULT(int i)
Definition: SQLiteDB.h:222
TString fConstraint
Definition: SQLiteDB.h:65
const KVNamedParameter & data() const
Definition: SQLiteDB.h:246
void set_data(const T &x)
Definition: SQLiteDB.h:139
TString Name() const
Definition: SQLiteDB.h:102
TString fTable
Definition: SQLiteDB.h:74
TString get_table() const
Definition: SQLiteDB.h:119
void print() const
Definition: SQLiteDB.h:134
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:179
TString TypeName() const
Definition: SQLiteDB.h:114
column & DEFAULT(double d)
Definition: SQLiteDB.h:230
Interface to ROOT SQLite database backend.
Definition: SQLiteDB.h:477
int get_number_of_tables() const
Definition: SQLiteDB.h:522
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:481
database(const TString &dbfile)
Definition: SQLiteDB.h:503
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:480
int get_count_column_value() const
Definition: SQLiteDB.h:650
bool update(const TString &table, const TString &columns, const TString &selection="")
Definition: SQLiteDB.cpp:1182
void delete_data(const TString &table, const TString &selection="")
Definition: SQLiteDB.cpp:1262
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:567
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:544
static bool debug
Definition: SQLiteDB.h:501
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:581
database & operator=(const database &db)
Definition: SQLiteDB.h:516
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:563
bool is_inserting() const
Definition: SQLiteDB.h:530
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:557
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:478
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:526
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:479
column count_column
Definition: SQLiteDB.h:499
database(const database &db)
Definition: SQLiteDB.h:507
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:571
bool prepare_data_insertion(const TString &)
Definition: SQLiteDB.cpp:307
TString fSelectedColumns
Definition: SQLiteDB.h:487
void clear_table(const TString &name)
Delete all data from 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:482
void read_table_infos()
initialise map of database tables from existing database
Definition: SQLiteDB.cpp:55
bool is_open() const
Definition: SQLiteDB.h:549
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:607
bool prepare_statement(const TString &query) const
Definition: SQLiteDB.h:592
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:286
foreign_key_constraint(foreign_key_constraint &&)=default
static std::map< TString, KVSQLite::column_type::types > type_map
Definition: SQLiteDB.h:309
const char * name() const
Definition: SQLiteDB.h:333
bool has_foreign_keys(bool ignore_back_references=true) const
Definition: SQLiteDB.h:462
bool is_temporary() const
Definition: SQLiteDB.h:368
void primary_key(const TString &cols)
Definition: SQLiteDB.h:432
KVSQLite::column & operator[](int i)
Definition: SQLiteDB.h:385
void print() const
Definition: SQLiteDB.h:417
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:307
void set_temporary(bool temp=true)
Definition: SQLiteDB.h:363
table(const table &other)
Definition: SQLiteDB.h:327
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:458
TString fPrimaryKey
Definition: SQLiteDB.h:310
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:318
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:324
column & add_column(const KVSQLite::column &c)
Definition: SQLiteDB.cpp:1623
void set_name(const TString &name)
Definition: SQLiteDB.h:337
TString fName
Definition: SQLiteDB.h:305
KVSQLite::column & get_column(const TString &n)
Definition: SQLiteDB.h:407
KVSQLite::column & operator[](const TString &n)
Definition: SQLiteDB.h:399
virtual ~table()
Definition: SQLiteDB.h:331
int check_columns(const KVNameValueList &)
Definition: SQLiteDB.cpp:1718
void set_insert_mode(KVSQLite_insert_mode i)
Definition: SQLiteDB.h:344
int number_of_columns() const
Definition: SQLiteDB.h:422
database * fDB
Definition: SQLiteDB.h:304
const KVSQLite::column & operator[](const TString &n) const
Definition: SQLiteDB.h:403
TString get_table_creation_command() const
Definition: SQLiteDB.cpp:1551
bool has_column(const TString &name) const
Definition: SQLiteDB.h:393
KVSQLite::column & get_column(int i)
Definition: SQLiteDB.h:389
void prepare_insert_single_row()
Definition: SQLiteDB.cpp:1810
column & add_column(const TString &name, KVSQLite_column_type type)
Definition: SQLiteDB.h:374
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:306
std::vector< foreign_key_constraint > fForeignKeys
Definition: SQLiteDB.h:311
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:381
std::unordered_map< std::string, int > fColMap
Definition: SQLiteDB.h:308
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
Definition: KVString.h:73
TSubString Strip(EStripType s=kTrailing, char c=' ') 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)