7 #include "KVSQLiteServer.h"
13 #include <unordered_map>
16 #include <KVNameValueList.h>
17 #include <KVNumberList.h>
31 namespace column_type {
40 namespace insert_mode {
67 static std::map<KVSQLite::column_type::types, TString>
inv_type_map;
145 template <
typename T>
210 defs +=
"CURRENT_DATE";
213 defs +=
"CURRENT_TIME";
216 defs +=
"CURRENT_TIMESTAMP";
250 template <
typename T>
258 return static_cast<T*
>(
fBlob);
308 mutable std::unordered_map<std::string, int>
fColMap;
309 static std::map<TString, KVSQLite::column_type::types>
type_map;
410 std::cout <<
"Error in <KVSQLite::table::get_column(const TString&)> : "
411 <<
n <<
" is not a column of table " <<
name() << std::endl;
419 std::cout <<
name() <<
"\n";
420 for (std::vector<KVSQLite::column>::const_iterator it =
fColumns.begin(); it !=
fColumns.end(); ++it) it->print();
464 if (!ignore_back_references)
return !
fForeignKeys.empty();
466 if (!
f.back_reference)
479 mutable std::unordered_map<std::string, KVSQLite::table>
fTables;
493 const TString& condition =
"")
const;
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;
583 auto ret =
fDBserv->Exec(sql_statement);
586 std::cerr <<
"database::execute : Exec(" << sql_statement <<
587 ") failed with code=" <<
fDBserv->GetErrorCode()
588 <<
" : " <<
fDBserv->GetErrorMsg() << std::endl;
597 std::cerr <<
"database::prepare_statement : Statement(" <<
query <<
598 ") failed with code=" <<
fDBserv->GetErrorCode()
599 <<
" : " <<
fDBserv->GetErrorMsg() << std::endl;
612 std::cerr <<
"database::query : Query(" <<
query <<
613 ") failed with code=" <<
fDBserv->GetErrorCode()
614 <<
" : " <<
fDBserv->GetErrorMsg() << std::endl;
624 const TString& selection =
"",
const TString& anything_else =
"");
626 const TString& selection =
"",
const TString& anything_else =
"");
628 const TString& selection =
"",
const TString& anything_else =
"");
634 bool distinct =
false,
const TString& anything_else =
"")
const;
#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 * 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.
Long_t fBlobSize
binary data
void set_binary_data(T &x)
void set_data_from_statement(TSQLStatement *s, int idx=-1) const
void set_table(const TString &name)
const char * type_name() const
std::pair< TString, KVSQLite_column_type > fNameType
const column & operator=(const T &x)
TString get_declaration() const
static std::map< KVSQLite::column_type::types, TString > inv_type_map
void set_data_in_statement(TSQLStatement *, int idx=-1) const
const char * name() const
column & DEFAULT(default_time t)
KVSQLite_column_type type() const
column & DEFAULT(const TString &s)
TString get_data_string_for_insert()
void set_binary_data(T *x)
const KVNamedParameter & data() const
void set_data(const T &x)
TString get_table() const
column(int idx, const TString &name, KVSQLite_column_type type)
void set_constraint(const TString &c)
column & DEFAULT(double d)
Interface to ROOT SQLite database backend.
int get_number_of_tables() const
void copy_table_data(const TString &source, const TString &destination, const TString &columns="*", const TString &selection="")
std::list< const column * > fSQLstmtCols
database(const TString &dbfile)
table & add_table(const table &)
TGraph * create_graph(const TString &tablename, const TString &Xcolumn, const TString &Ycolumn, const TString &selection="")
std::unique_ptr< TSQLResult > SelectRowsFromTable(const TString &table, const TString &columns="*", const TString &condition="") const
std::unique_ptr< TSQLStatement > fSQLstmt
int get_count_column_value() const
bool update(const TString &table, const TString &columns, const TString &selection="")
void delete_data(const TString &table, const TString &selection="")
KVString double_quote_all_tables_and_columns(const TString &) const
void show_tables() const
print list of tables
const KVSQLite::table & operator[](const TString &name) const
void insert_data_row_selected_columns()
void delete_table(const TString &table)
column & add_column(const TString &table, const TString &name, const TString &type)
void print_selection(const TString &table, const TString &columns, const TString &condition, int column_width=20) const
Print on stdout contents of database.
std::list< const table * > generate_table_selection_string(const TString &tables, KVString &table_selection) const
bool execute(const TString &sql_statement)
database & operator=(const database &db)
KVNumberList get_integer_list(const TString &tables, const TString &column, const TString &selection="", const TString &anything_else="")
KVSQLite::table & operator[](const TString &name)
bool is_inserting() const
void open(const TString &dbfile)
bool has_table(const TString &table)
void end_data_insertion()
bool select_data(const TString &tables, const TString &columns="*", const TString &selection="", bool distinct=false, const TString &anything_else="") const
std::unique_ptr< KVSQLiteServer > fDBserv
KVNameValueList get_name_value_list(const TString &table, const TString &name_column, const TString &value_column, const TString &selection="", const TString &anything_else="")
bool get_next_result() const
bool prepare_data_insertion_selected_columns(const TString &table)
void Dump() const
Print on stdout contents of database.
std::unordered_map< std::string, KVSQLite::table > fTables
database(const database &db)
TString get_string_list(const TString &tables, const TString &column, const TString &selection="", const TString &anything_else="")
void PrintResults(TSQLResult *tabent, int column_width=20) const
KVSQLite::table & get_table(const TString &name)
bool prepare_data_insertion(const TString &)
void clear_table(const TString &name)
Delete all data from table.
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().
void read_table_infos()
initialise map of database tables from existing database
int count(const TString &tables, const TString &column="*", const TString &selection="", bool distinct=false, const TString &anything_else="") const
void add_missing_columns(const TString &table, const KVNameValueList &l)
std::unique_ptr< TSQLResult > query(const TString &query) const
bool prepare_statement(const TString &query) const
foreign_key_constraint(const foreign_key_constraint &)=default
bool is_back_reference() const
foreign_key_constraint()=default
foreign_key_constraint(const TString &chk, const TString &pt, const TString &pk="", bool back_ref=false)
foreign_key_constraint(foreign_key_constraint &&)=default
static std::map< TString, KVSQLite::column_type::types > type_map
const char * name() const
bool has_foreign_keys(bool ignore_back_references=true) const
bool is_temporary() const
void primary_key(const TString &cols)
KVSQLite::column & operator[](int i)
void set_all_columns_null()
set the value of all columns in the table to NULL
std::vector< KVSQLite::column > fColumns
void set_temporary(bool temp=true)
table(const table &other)
void show_columns() const
print list of columns
bool has_primary_key() const
void foreign_key(const TString &child_key, const TString &parent_table, const TString &parent_key)
table(const TString &Name, const std::vector< KVSQLite::column > &cols)
void set_foreign_key_back_references()
TString get_column_names(const TString &exclude="", const TString &delim=",") const
table(const TString &Name="")
column & add_column(const KVSQLite::column &c)
void set_name(const TString &name)
KVSQLite::column & get_column(const TString &n)
KVSQLite::column & operator[](const TString &n)
int check_columns(const KVNameValueList &)
void set_insert_mode(KVSQLite_insert_mode i)
int number_of_columns() const
const KVSQLite::column & operator[](const TString &n) const
TString get_table_creation_command() const
bool has_column(const TString &name) const
KVSQLite::column & get_column(int i)
void prepare_insert_single_row()
column & add_column(const TString &name, KVSQLite_column_type type)
void prepare_data(const KVNameValueList &, const KVNamedParameter *=nullptr)
const char * get_insert_command() const
KVSQLite_insert_mode fInsert
std::vector< foreign_key_constraint > fForeignKeys
void insert_single_row()
use to add single row data to table. see prepare_insert_single_row() for usage.
const KVSQLite::column & operator[](int i) const
std::unordered_map< std::string, int > fColMap
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
TSubString Strip(EStripType s=kTrailing, char c=' ') const
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
RooCmdArg Name(const char *name)
KVSQLite::column_type::types KVSQLite_column_type
KVSQLite::insert_mode::types KVSQLite_insert_mode