MIDAS
Loading...
Searching...
No Matches
SqlHistoryBase Class Referenceabstract
Inheritance diagram for SqlHistoryBase:
Collaboration diagram for SqlHistoryBase:

Public Member Functions

 SqlHistoryBase ()
 
virtual ~SqlHistoryBase ()
 
int hs_set_debug (int debug)
 set debug level, returns previous debug level
 
int hs_connect (const char *connect_string)
 returns HS_SUCCESS
 
int hs_disconnect ()
 disconnect from history, returns HS_SUCCESS
 
HsSchemanew_event (const char *event_name, time_t timestamp, int ntags, const TAG tags[])
 
int read_schema (HsSchemaVector *sv, const char *event_name, const time_t timestamp)
 
- Public Member Functions inherited from SchemaHistoryBase
 SchemaHistoryBase ()
 
virtual ~SchemaHistoryBase ()
 
int hs_define_event (const char *event_name, time_t timestamp, int ntags, const TAG tags[])
 see hs_define_event(), returns HS_SUCCESS or HS_FILE_ERROR
 
int hs_write_event (const char *event_name, time_t timestamp, int buffer_size, const char *buffer)
 see hs_write_event(), returns HS_SUCCESS or HS_FILE_ERROR
 
int hs_flush_buffers ()
 flush buffered data to storage where it is visible to mhttpd
 
int hs_clear_cache ()
 clear internal cache, returns HS_SUCCESS
 
int hs_get_events (time_t t, std::vector< std::string > *pevents)
 get list of events that exist(ed) at given time and later (value 0 means "return all events from beginning of time"), returns HS_SUCCESS
 
int hs_get_tags (const char *event_name, time_t t, std::vector< TAG > *ptags)
 get list of history variables for given event (use event names returned by hs_get_events()) that exist(ed) at given time and later (value 0 means "all variables for this event that ever existed"), also see hs_get_tags(), returns HS_SUCCESS
 
int hs_get_last_written (time_t timestamp, int num_var, const char *const event_name[], const char *const var_name[], const int var_index[], time_t last_written[])
 
int hs_read_buffer (time_t start_time, time_t end_time, int num_var, const char *const event_name[], const char *const var_name[], const int var_index[], MidasHistoryBufferInterface *buffer[], int hs_status[])
 returns HS_SUCCESS
 
int hs_read (time_t start_time, time_t end_time, time_t interval, int num_var, const char *const event_name[], const char *const var_name[], const int var_index[], int num_entries[], time_t *time_buffer[], double *data_buffer[], int st[])
 see hs_read(), returns HS_SUCCESS
 
int hs_read_binned (time_t start_time, time_t end_time, int num_bins, int num_var, const char *const event_name[], const char *const var_name[], const int var_index[], int num_entries[], int *count_bins[], double *mean_bins[], double *rms_bins[], double *min_bins[], double *max_bins[], time_t *bins_first_time[], double *bins_first_value[], time_t *bins_last_time[], double *bins_last_value[], time_t last_time[], double last_value[], int st[])
 returns HS_SUCCESS
 
- Public Member Functions inherited from MidasHistoryInterface
 MidasHistoryInterface ()
 history type: MIDAS, ODBC, SQLITE, etc
 
virtual ~MidasHistoryInterface ()
 

Public Attributes

SqlBasefSql
 
- Public Attributes inherited from MidasHistoryInterface
char name [NAME_LENGTH]
 
char type [NAME_LENGTH]
 history channel name
 

Protected Member Functions

virtual int read_table_and_event_names (HsSchemaVector *sv)=0
 
virtual int read_column_names (HsSchemaVector *sv, const char *table_name, const char *event_name)=0
 
virtual int create_table (HsSchemaVector *sv, const char *event_name, time_t timestamp)=0
 
virtual int update_column (const char *event_name, const char *table_name, const char *column_name, const char *column_type, const char *tag_name, const char *tag_type, const time_t timestamp, bool active, bool *have_transaction)=0
 
int update_schema (HsSqlSchema *s, const time_t timestamp, const int ntags, const TAG tags[], bool write_enable)
 
int update_schema1 (HsSqlSchema *s, const time_t timestamp, const int ntags, const TAG tags[], bool write_enable, bool *have_transaction)
 

Additional Inherited Members

- Protected Attributes inherited from SchemaHistoryBase
int fDebug
 
std::string fConnectString
 
HsSchemaVector fWriterCurrentSchema
 
std::vector< HsSchema * > fEvents
 
HsSchemaVector fSchema
 

Detailed Description

Definition at line 4617 of file history_schema.cxx.

Constructor & Destructor Documentation

◆ SqlHistoryBase()

SqlHistoryBase::SqlHistoryBase ( )
inline

Definition at line 4622 of file history_schema.cxx.

4623 {
4624 fSql = NULL;
4626 }
int hs_clear_cache()
clear internal cache, returns HS_SUCCESS
TH1X EXPRT * h1_book(const char *name, const char *title, int bins, double min, double max)
Definition rmidas.h:24
Here is the call graph for this function:

◆ ~SqlHistoryBase()

virtual SqlHistoryBase::~SqlHistoryBase ( )
inlinevirtual

Definition at line 4628 of file history_schema.cxx.

4629 {
4630 hs_disconnect();
4631 if (fSql)
4632 delete fSql;
4633 fSql = NULL;
4634 }
int hs_disconnect()
disconnect from history, returns HS_SUCCESS
Here is the call graph for this function:

Member Function Documentation

◆ create_table()

virtual int SqlHistoryBase::create_table ( HsSchemaVector sv,
const char event_name,
time_t  timestamp 
)
protectedpure virtual

Implemented in SqliteHistory, and MysqlHistory.

Here is the caller graph for this function:

◆ hs_connect()

int SqlHistoryBase::hs_connect ( const char connect_string)
virtual

returns HS_SUCCESS

Implements SchemaHistoryBase.

Definition at line 4658 of file history_schema.cxx.

4659{
4660 if (fDebug)
4661 printf("hs_connect [%s]!\n", connect_string);
4662
4663 assert(fSql);
4664
4665 if (fSql->IsConnected())
4666 if (strcmp(fConnectString.c_str(), connect_string) == 0)
4667 return HS_SUCCESS;
4668
4669 hs_disconnect();
4670
4671 if (!connect_string || strlen(connect_string) < 1) {
4672 // FIXME: should use "logger dir" or some such default, that code should be in hs_get_history(), not here
4673 connect_string = ".";
4674 }
4675
4677
4678 if (fDebug)
4679 printf("hs_connect: connecting to SQL database \'%s\'\n", fConnectString.c_str());
4680
4681 int status = fSql->Connect(fConnectString.c_str());
4682 if (status != DB_SUCCESS)
4683 return status;
4684
4685 return HS_SUCCESS;
4686}
virtual bool IsConnected()=0
virtual int Connect(const char *dsn=0)=0
#define DB_SUCCESS
Definition midas.h:631
#define HS_SUCCESS
Definition midas.h:727
DWORD status
Definition odbhist.cxx:39
Here is the call graph for this function:

◆ hs_disconnect()

int SqlHistoryBase::hs_disconnect ( )
virtual

disconnect from history, returns HS_SUCCESS

Implements SchemaHistoryBase.

Definition at line 4688 of file history_schema.cxx.

4689{
4690 if (fDebug)
4691 printf("hs_disconnect!\n");
4692
4694
4695 fSql->Disconnect();
4696
4698
4699 return HS_SUCCESS;
4700}
int hs_flush_buffers()
flush buffered data to storage where it is visible to mhttpd
virtual int Disconnect()=0
Here is the call graph for this function:
Here is the caller graph for this function:

◆ hs_set_debug()

int SqlHistoryBase::hs_set_debug ( int  debug)
inlinevirtual

set debug level, returns previous debug level

Reimplemented from SchemaHistoryBase.

Definition at line 4636 of file history_schema.cxx.

4637 {
4638 if (fSql)
4639 fSql->fDebug = debug;
4641 }
virtual int hs_set_debug(int debug)
set debug level, returns previous debug level
BOOL debug
debug printouts
Definition mana.cxx:254
Here is the call graph for this function:

◆ new_event()

HsSchema * SqlHistoryBase::new_event ( const char event_name,
time_t  timestamp,
int  ntags,
const TAG  tags[] 
)
virtual

Implements SchemaHistoryBase.

Definition at line 4702 of file history_schema.cxx.

4703{
4704 if (fDebug)
4705 printf("SqlHistory::new_event: event [%s], timestamp %s, ntags %d\n", event_name, TimeToString(timestamp).c_str(), ntags);
4706
4707 int status;
4708
4709 if (fWriterCurrentSchema.size() == 0) {
4711 if (status != HS_SUCCESS)
4712 return NULL;
4713 }
4714
4715 HsSqlSchema* s = (HsSqlSchema*)fWriterCurrentSchema.find_event(event_name, timestamp);
4716
4717 // schema does not exist, the SQL tables probably do not exist yet
4718
4719 if (!s) {
4720 status = create_table(&fWriterCurrentSchema, event_name, timestamp);
4721 if (status != HS_SUCCESS)
4722 return NULL;
4723
4724 s = (HsSqlSchema*)fWriterCurrentSchema.find_event(event_name, timestamp);
4725
4726 if (!s) {
4727 cm_msg(MERROR, "SqlHistory::new_event", "Error: Cannot create schema for event \'%s\', see previous messages", event_name);
4728 fWriterCurrentSchema.find_event(event_name, timestamp, 1);
4729 return NULL;
4730 }
4731 }
4732
4733 assert(s != NULL);
4734
4736 if (status != HS_SUCCESS)
4737 return NULL;
4738
4739 s = (HsSqlSchema*)fWriterCurrentSchema.find_event(event_name, timestamp);
4740
4741 if (!s) {
4742 cm_msg(MERROR, "SqlHistory::new_event", "Error: Cannot update schema database for event \'%s\', see previous messages", event_name);
4743 return NULL;
4744 }
4745
4746 if (0||fDebug) {
4747 printf("SqlHistory::new_event: schema for [%s] is %p\n", event_name, s);
4748 if (s)
4749 s->print();
4750 }
4751
4752 status = update_schema(s, timestamp, ntags, tags, true);
4753 if (status != HS_SUCCESS) {
4754 cm_msg(MERROR, "SqlHistory::new_event", "Error: Cannot create schema for event \'%s\', see previous messages", event_name);
4755 return NULL;
4756 }
4757
4759 if (status != HS_SUCCESS)
4760 return NULL;
4761
4762 s = (HsSqlSchema*)fWriterCurrentSchema.find_event(event_name, timestamp);
4763
4764 if (!s) {
4765 cm_msg(MERROR, "SqlHistory::new_event", "Error: Cannot update schema database for event \'%s\', see previous messages", event_name);
4766 return NULL;
4767 }
4768
4769 if (0||fDebug) {
4770 printf("SqlHistory::new_event: schema for [%s] is %p\n", event_name, s);
4771 if (s)
4772 s->print();
4773 }
4774
4775 // last call to UpdateMysqlSchema with "false" will check that new schema matches the new tags
4776
4777 status = update_schema(s, timestamp, ntags, tags, false);
4778 if (status != HS_SUCCESS) {
4779 cm_msg(MERROR, "SqlHistory::new_event", "Error: Cannot create schema for event \'%s\', see previous messages", event_name);
4780 //fDebug = 1;
4781 //update_schema(s, timestamp, ntags, tags, false);
4782 //abort();
4783 return NULL;
4784 }
4785
4786 HsSqlSchema* e = new HsSqlSchema();
4787
4788 *e = *s; // make a copy of the schema
4789
4790 return e;
4791}
unsigned size() const
HsSchema * find_event(const char *event_name, const time_t timestamp, int debug=0)
HsSchemaVector fWriterCurrentSchema
virtual int create_table(HsSchemaVector *sv, const char *event_name, time_t timestamp)=0
virtual int read_column_names(HsSchemaVector *sv, const char *table_name, const char *event_name)=0
virtual int read_table_and_event_names(HsSchemaVector *sv)=0
int update_schema(HsSqlSchema *s, const time_t timestamp, const int ntags, const TAG tags[], bool write_enable)
#define MERROR
Definition midas.h:559
INT cm_msg(INT message_type, const char *filename, INT line, const char *routine, const char *format,...)
Definition midas.cxx:915
static std::string TimeToString(time_t t)
std::string event_name
void print(bool print_tags=true) const
std::string table_name
static double e(void)
Definition tinyexpr.c:136
Here is the call graph for this function:

◆ read_column_names()

virtual int SqlHistoryBase::read_column_names ( HsSchemaVector sv,
const char table_name,
const char event_name 
)
protectedpure virtual

Implemented in SqliteHistory, and MysqlHistory.

Here is the caller graph for this function:

◆ read_schema()

int SqlHistoryBase::read_schema ( HsSchemaVector sv,
const char event_name,
const time_t  timestamp 
)
virtual

Implements SchemaHistoryBase.

Definition at line 4793 of file history_schema.cxx.

4794{
4795 if (fDebug)
4796 printf("SqlHistory::read_schema: loading schema for event [%s] at time %s\n", event_name, TimeToString(timestamp).c_str());
4797
4798 int status;
4799
4800 if (fSchema.size() == 0) {
4802 if (status != HS_SUCCESS)
4803 return status;
4804 }
4805
4806 //sv->print(false);
4807
4808 if (event_name == NULL)
4809 return HS_SUCCESS;
4810
4811 for (unsigned i=0; i<sv->size(); i++) {
4812 HsSqlSchema* h = (HsSqlSchema*)(*sv)[i];
4813 // skip schema with already read column names
4814 if (h->variables.size() > 0)
4815 continue;
4816 // skip schema with different name
4817 if (!MatchEventName(h->event_name.c_str(), event_name))
4818 continue;
4819
4820 unsigned nn = sv->size();
4821
4822 status = read_column_names(sv, h->table_name.c_str(), h->event_name.c_str());
4823
4824 // if new schema was added, loop all over again
4825 if (sv->size() != nn)
4826 i=0;
4827 }
4828
4829 //sv->print(false);
4830
4831 return HS_SUCCESS;
4832}
HsSchemaVector fSchema
static bool MatchEventName(const char *event_name, const char *var_event_name)
INT i
Definition mdump.cxx:32
std::vector< HsSchemaEntry > variables
Here is the call graph for this function:

◆ read_table_and_event_names()

virtual int SqlHistoryBase::read_table_and_event_names ( HsSchemaVector sv)
protectedpure virtual

Implemented in SqliteHistory, and MysqlHistory.

Here is the caller graph for this function:

◆ update_column()

virtual int SqlHistoryBase::update_column ( const char event_name,
const char table_name,
const char column_name,
const char column_type,
const char tag_name,
const char tag_type,
const time_t  timestamp,
bool  active,
bool have_transaction 
)
protectedpure virtual

Implemented in SqliteHistory, and MysqlHistory.

Here is the caller graph for this function:

◆ update_schema()

int SqlHistoryBase::update_schema ( HsSqlSchema s,
const time_t  timestamp,
const int  ntags,
const TAG  tags[],
bool  write_enable 
)
protected

Definition at line 4834 of file history_schema.cxx.

4835{
4836 int status;
4837 bool have_transaction = false;
4838
4839 status = update_schema1(s, timestamp, ntags, tags, write_enable, &have_transaction);
4840
4841 if (have_transaction) {
4842 int xstatus;
4843
4844 if (status == HS_SUCCESS)
4846 else
4848
4849 if (xstatus != DB_SUCCESS) {
4850 return HS_FILE_ERROR;
4851 }
4852 have_transaction = false;
4853 }
4854
4855 return status;
4856}
virtual int RollbackTransaction(const char *table_name)=0
virtual int CommitTransaction(const char *table_name)=0
int update_schema1(HsSqlSchema *s, const time_t timestamp, const int ntags, const TAG tags[], bool write_enable, bool *have_transaction)
#define HS_FILE_ERROR
Definition midas.h:728
Here is the call graph for this function:
Here is the caller graph for this function:

◆ update_schema1()

int SqlHistoryBase::update_schema1 ( HsSqlSchema s,
const time_t  timestamp,
const int  ntags,
const TAG  tags[],
bool  write_enable,
bool have_transaction 
)
protected

Definition at line 4858 of file history_schema.cxx.

4859{
4860 int status;
4861
4862 if (fDebug)
4863 printf("update_schema1\n");
4864
4865 // check that compare schema with tags[]
4866
4867 bool schema_ok = true;
4868
4869 int offset = 0;
4870 for (int i=0; i<ntags; i++) {
4871 for (unsigned int j=0; j<tags[i].n_data; j++) {
4872 int tagtype = tags[i].type;
4873 std::string tagname = tags[i].name;
4874 std::string maybe_colname = MidasNameToSqlName(tags[i].name);
4875
4876 if (tags[i].n_data > 1) {
4877 char s[256];
4878 sprintf(s, "[%d]", j);
4879 tagname += s;
4880
4881 sprintf(s, "_%d", j);
4882 maybe_colname += s;
4883 }
4884
4885 int count = 0;
4886
4887 for (unsigned j=0; j<s->variables.size(); j++) {
4888 // NB: inactive columns will be reactivated or recreated by the if(count==0) branch. K.O.
4889 if (s->variables[j].inactive)
4890 continue;
4891 if (tagname == s->variables[j].name) {
4892 if (s->sql->TypesCompatible(tagtype, s->column_types[j].c_str())) {
4893 if (count == 0) {
4894 s->offsets[j] = offset;
4896 }
4897 count++;
4898 if (count > 1) {
4899 cm_msg(MERROR, "SqlHistory::update_schema", "Duplicate SQL column \'%s\' type \'%s\' in table \"%s\" with MIDAS type \'%s\' history event \"%s\" tag \"%s\"", s->column_names[j].c_str(), s->column_types[j].c_str(), s->table_name.c_str(), rpc_tid_name(tagtype), s->event_name.c_str(), tagname.c_str());
4901 }
4902 } else {
4903 // column with incompatible type, mark it as unused
4904 schema_ok = false;
4905 if (fDebug)
4906 printf("Incompatible column!\n");
4907 if (write_enable) {
4908 cm_msg(MINFO, "SqlHistory::update_schema", "Deactivating SQL column \'%s\' type \'%s\' in table \"%s\" as incompatible with MIDAS type \'%s\' history event \"%s\" tag \"%s\"", s->column_names[j].c_str(), s->column_types[j].c_str(), s->table_name.c_str(), rpc_tid_name(tagtype), s->event_name.c_str(), tagname.c_str());
4910
4911 status = update_column(s->event_name.c_str(), s->table_name.c_str(), s->column_names[j].c_str(), s->column_types[j].c_str(), s->variables[j].tag_name.c_str(), s->variables[i].tag_type.c_str(), timestamp, false, have_transaction);
4912 if (status != HS_SUCCESS)
4913 return status;
4914 }
4915 }
4916 }
4917 }
4918
4919 if (count == 0) {
4920 // tag does not have a corresponding column
4921 schema_ok = false;
4922 if (fDebug)
4923 printf("No column for tag %s!\n", tagname.c_str());
4924
4925 bool found_column = false;
4926
4927 if (write_enable) {
4928 for (unsigned j=0; j<s->variables.size(); j++) {
4929 if (tagname == s->variables[j].tag_name) {
4930 bool typeok = s->sql->TypesCompatible(tagtype, s->column_types[j].c_str());
4931 if (typeok) {
4932 cm_msg(MINFO, "SqlHistory::update_schema", "Reactivating SQL column \'%s\' type \'%s\' in table \"%s\" for history event \"%s\" tag \"%s\"", s->column_names[j].c_str(), s->column_types[j].c_str(), s->table_name.c_str(), s->event_name.c_str(), tagname.c_str());
4934
4935 status = update_column(s->event_name.c_str(), s->table_name.c_str(), s->column_names[j].c_str(), s->column_types[j].c_str(), s->variables[j].tag_name.c_str(), s->variables[j].tag_type.c_str(), timestamp, true, have_transaction);
4936 if (status != HS_SUCCESS)
4937 return status;
4938
4939 if (count == 0) {
4940 s->offsets[j] = offset;
4942 }
4943 count++;
4944 found_column = true;
4945 if (count > 1) {
4946 cm_msg(MERROR, "SqlHistory::update_schema", "Duplicate SQL column \'%s\' type \'%s\' in table \"%s\" for history event \"%s\" tag \"%s\"", s->column_names[j].c_str(), s->column_types[j].c_str(), s->table_name.c_str(), s->event_name.c_str(), tagname.c_str());
4948 }
4949 }
4950 }
4951 }
4952 }
4953
4954 // create column
4955 if (!found_column && write_enable) {
4956 std::string col_name = maybe_colname;
4957 const char* col_type = s->sql->ColumnType(tagtype);
4958
4959 bool dupe = false;
4960 for (unsigned kk=0; kk<s->column_names.size(); kk++)
4961 if (s->column_names[kk] == col_name) {
4962 dupe = true;
4963 break;
4964 }
4965
4966 time_t now = time(NULL);
4967
4968 bool retry = false;
4969 for (int t=0; t<20; t++) {
4970
4971 // if duplicate column name, change it, try again
4972 if (dupe || retry) {
4974 col_name += "_";
4976 if (t > 0) {
4977 char s[256];
4978 sprintf(s, "_%d", t);
4979 col_name += s;
4980 }
4981 }
4982
4983 if (fDebug)
4984 printf("SqlHistory::update_schema: table [%s], add column [%s] type [%s] for tag [%s]\n", s->table_name.c_str(), col_name.c_str(), col_type, tagname.c_str());
4985
4987
4988 if (status == DB_KEY_EXIST) {
4989 if (fDebug)
4990 printf("SqlHistory::update_schema: table [%s], add column [%s] type [%s] for tag [%s] failed: duplicate column name\n", s->table_name.c_str(), col_name.c_str(), col_type, tagname.c_str());
4991 retry = true;
4992 continue;
4993 }
4994
4995 if (status != HS_SUCCESS)
4996 return status;
4997
4998 break;
4999 }
5000
5001 if (status != HS_SUCCESS)
5002 return status;
5003
5004 status = update_column(s->event_name.c_str(), s->table_name.c_str(), col_name.c_str(), col_type, tagname.c_str(), rpc_tid_name(tagtype), timestamp, true, have_transaction);
5005 if (status != HS_SUCCESS)
5006 return status;
5007 }
5008 }
5009
5010 if (count > 1) {
5011 // schema has duplicate tags
5012 schema_ok = false;
5013 cm_msg(MERROR, "SqlHistory::update_schema", "Duplicate tags or SQL columns for history event \"%s\" tag \"%s\"", s->event_name.c_str(), tagname.c_str());
5015 }
5016 }
5017 }
5018
5019 // mark as unused all columns not listed in tags
5020
5021 for (unsigned k=0; k<s->column_names.size(); k++)
5022 if (s->variables[k].name.length() > 0) {
5023 bool found = false;
5024
5025 for (int i=0; i<ntags; i++) {
5026 for (unsigned int j=0; j<tags[i].n_data; j++) {
5027 std::string tagname = tags[i].name;
5028
5029 if (tags[i].n_data > 1) {
5030 char s[256];
5031 sprintf(s, "[%d]", j);
5032 tagname += s;
5033 }
5034
5035 if (s->variables[k].name == tagname) {
5036 found = true;
5037 break;
5038 }
5039 }
5040
5041 if (found)
5042 break;
5043 }
5044
5045 if (!found) {
5046 // column not found in tags list
5047 schema_ok = false;
5048 if (fDebug)
5049 printf("Event [%s] Column [%s] tag [%s] not listed in tags list!\n", s->event_name.c_str(), s->column_names[k].c_str(), s->variables[k].name.c_str());
5050 if (write_enable) {
5051 cm_msg(MINFO, "SqlHistory::update_schema", "Deactivating SQL column \'%s\' type \'%s\' in table \"%s\" for history event \"%s\" not used for any tags", s->column_names[k].c_str(), s->column_types[k].c_str(), s->table_name.c_str(), s->event_name.c_str());
5053
5054 status = update_column(s->event_name.c_str(), s->table_name.c_str(), s->column_names[k].c_str(), s->column_types[k].c_str(), s->variables[k].tag_name.c_str(), s->variables[k].tag_type.c_str(), timestamp, false, have_transaction);
5055 if (status != HS_SUCCESS)
5056 return status;
5057 }
5058 }
5059 }
5060
5061 if (!write_enable)
5062 if (!schema_ok) {
5063 if (fDebug)
5064 printf("Return error!\n");
5065 return HS_FILE_ERROR;
5066 }
5067
5068 return HS_SUCCESS;
5069}
char name[NAME_LENGTH]
Definition history.h:111
virtual bool TypesCompatible(int midas_tid, const char *sql_type)=0
virtual const char * ColumnType(int midas_tid)=0
virtual int update_column(const char *event_name, const char *table_name, const char *column_name, const char *column_type, const char *tag_name, const char *tag_type, const time_t timestamp, bool active, bool *have_transaction)=0
#define DB_KEY_EXIST
Definition midas.h:641
#define MINFO
Definition midas.h:560
INT cm_msg_flush_buffer()
Definition midas.cxx:865
const char * rpc_tid_name(INT id)
Definition midas.cxx:11764
INT rpc_tid_size(INT id)
Definition midas.cxx:11757
static std::string MidasNameToSqlName(const char *s)
static int CreateSqlColumn(SqlBase *sql, const char *table_name, const char *column_name, const char *column_type, bool *have_transaction, int debug)
double count
Definition mdump.cxx:33
static int offset
Definition mgd.cxx:1500
INT j
Definition odbhist.cxx:40
INT k
Definition odbhist.cxx:40
std::vector< int > offsets
std::vector< std::string > column_types
std::vector< std::string > column_names
DWORD type
Definition midas.h:1236
DWORD n_data
Definition midas.h:1237
char name[NAME_LENGTH]
Definition midas.h:1235
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ fSql

SqlBase* SqlHistoryBase::fSql

Definition at line 4620 of file history_schema.cxx.


The documentation for this class was generated from the following file: