69 const char*
Bool =
"Bool_t";
70 const char*
Char =
"Char_t";
72 const char*
Int =
"Int_t";
73 const char*
Long =
"Long_t";
79 const char*
UInt =
"UInt_t";
143 #ifdef R__VISUAL_CPLUSPLUS
144 #define FLong64 "%I64d"
145 #define FULong64 "%I64u"
147 #define FLong64 "%lld"
148 #define FULong64 "%llu"
153 if ((value==0) || (*value==0))
return 0;
285 Int_t len = strlen(fullname);
299 if (len + numlen > maxlen)
300 res.
Resize(maxlen - numlen);
302 if (cnt>=0) res+=scnt;
310 Error(
"DefineSQLName",
"Cannot find reasonable column name for field %s",fullname);
326 if (strcmp(colname, sqlname)==0)
return kTRUE;
612 if (info==0)
return kFALSE;
681 const char* value = curr->
GetValue();
682 if ((value!=0) && (strlen(value)>0))
686 curr = recursive ? curr->
GetParent() : 0;
736 for(
Int_t n=0;
n<level;
n++) std::cout <<
" ";
738 case 0: std::cout <<
"Undefined type";
break;
748 std::cout <<
"Class: " << info->
GetName();
754 std::cout <<
"Member: " << elem->
GetName();
758 std::cout <<
"Value: " <<
fValue;
764 std::cout <<
"Array ";
765 if (fValue.Length()>0) std::cout <<
" sz = " << fValue;
770 std::cout <<
"CustomClass: " << cl->
GetName() <<
" ver = " <<
fValue;
774 std::cout <<
"Unknown type";
776 std::cout << std::endl;
843 class TSqlCmdsBuffer :
public TObject {
855 virtual ~TSqlCmdsBuffer()
863 void AddValues(
Bool_t isnorm,
const char* values)
866 if (isnorm) fNormCmds.Add(str);
867 else fBlobCmds.Add(str);
882 class TSqlRegistry :
public TObject {
911 Int_t fLastLongStrId;
920 virtual ~TSqlRegistry()
928 Long64_t GetNextObjId() {
return ++fLastObjId; }
930 void AddSqlCmd(
const char* query)
939 if (sqlinfo==0)
return 0;
940 TSqlCmdsBuffer* buf = (TSqlCmdsBuffer*) fPool.
GetValue(sqlinfo);
942 buf =
new TSqlCmdsBuffer(fFile, sqlinfo);
943 fPool.
Add(sqlinfo, buf);
948 void ConvertSqlValues(
TObjArray& values,
const char* tablename)
954 if ((values.
GetLast()<0) || (tablename==0))
return;
958 Int_t maxsize = 50000;
965 while ((cmd =
iter())!=0) {
968 sqlcmd.
Form(
"INSERT INTO %s%s%s VALUES (%s)",
969 quote, tablename, quote, cmd->
GetName());
976 if (!canbelong || (sqlcmd.
Length()>maxsize*0.9)) {
977 AddSqlCmd(sqlcmd.
Data());
982 if (sqlcmd.
Length()>0) AddSqlCmd(sqlcmd.
Data());
985 void ConvertPoolValues()
990 TSqlCmdsBuffer* buf = (TSqlCmdsBuffer*) fPool.
GetValue(sqlinfo);
991 if (buf==0)
continue;
997 buf->fBlobStmt->Process();
999 buf->fNormStmt->Process();
1004 if (fRegStmt) fRegStmt->
Process();
1012 Error(
"AddRegCmd",
"Something wrong with objid = %lld", objid);
1021 const char* pars = fFile->
IsOracle() ?
":1, :2, :3, :4" :
"?, ?, ?, ?";
1022 sqlcmd.
Form(
"INSERT INTO %s%s%s VALUES (%s)",
1039 cmd.
Form(
"%lld, %lld, %s%s%s, %d",
1041 valuequote, cl->
GetName(), valuequote,
1046 Int_t AddLongString(
const char* strvalue)
1052 Int_t strid = ++fLastLongStrId;
1058 cmd.
Form(
"%lld, %d, %s", fCurrentObjId, strid, value.
Data());
1067 TSqlCmdsBuffer* buf = GetCmdsBuffer(sqlinfo);
1068 if (buf==0)
return kFALSE;
1077 sqlcmd.
Form(
"INSERT INTO %s%s%s VALUES (",
1080 if (
n>0) sqlcmd +=
", ";
1090 if (stmt==0)
return kFALSE;
1091 buf->fNormStmt = stmt;
1099 const char* value = columns->
GetColumn(ncol);
1100 if (value==0) value =
"";
1101 stmt->
SetString(ncol, value, sizelimit);
1112 if (InsertToNormalTableOracle(columns, sqlinfo))
1120 if (
n>0) values+=
", ";
1131 TSqlCmdsBuffer* buf = GetCmdsBuffer(sqlinfo);
1132 if (buf!=0) buf->AddValues(
kTRUE, values.
Data());
1143 class TSqlRawBuffer :
public TObject {
1160 fCmdBuf = reg->GetCmdsBuffer(sqlinfo);
1161 fObjId = reg->fCurrentObjId;
1163 fValueMask.Form(
"%lld, %s, %s%s%s, %s", fObjId,
"%d", fValueQuote,
"%s", fValueQuote,
"%s");
1164 fMaxStrSize = reg->fFile->SQLSmallTextTypeLimit();
1167 virtual ~TSqlRawBuffer()
1171 if ((stmt!=0) && fFile->
IsOracle()) {
1174 fCmdBuf->fBlobStmt = 0;
1178 Bool_t IsAnyData()
const {
return fRawId>0; }
1180 void AddLine(
const char* name,
const char* value,
const char* topname = 0,
const char* ns = 0)
1182 if (fCmdBuf==0)
return;
1196 const char* params = fFile->
IsOracle() ?
":1, :2, :3, :4" :
"?, ?, ?, ?";
1197 sqlcmd.
Form(
"INSERT INTO %s%s%s VALUES (%s)",
1198 quote, fInfo->GetRawTableName(), quote, params);
1200 fCmdBuf->fBlobStmt = stmt;
1205 const char* fullname =
name;
1206 if ((topname!=0) && (ns!=0)) {
1210 fullname = buf.
Data();
1218 stmt->
SetInt(1, fRawId++);
1219 stmt->
SetString(2, fullname, fMaxStrSize);
1226 cmd.
Form(fValueMask.Data(), fRawId++, fullname, valuebuf.Data());
1233 TSqlCmdsBuffer* fCmdBuf;
1237 const char* fValueQuote;
1250 if (zn>max) max = zn;
1264 if ((file==0) || (cmds==0))
return kFALSE;
1279 reg.ConvertPoolValues();
1292 const char* ns = reg->fFile->SQLNameSeparator();
1313 Error(
"PerformConversion",
"version without class");
1321 if (info==0)
return;
1329 Long64_t objid = reg->GetNextObjId();
1331 sobjid.
Form(
"%lld",objid);
1351 const char* tname = (
const char*)
fPointer;
1358 if (tname!=0) sbuf = tname;
1359 else sbuf =
"Value";
1366 Int_t size = strlen(value);
1367 if (size > reg->fFile->SQLSmallTextTypeLimit()) {
1368 Int_t strid = reg->AddLongString(value);
1369 buf = reg->fFile->CodeLongString(reg->fCurrentObjId, strid);
1398 if ((cl==0) || (objid<0))
return kFALSE;
1401 std::cout <<
"Store object " << objid <<
" cl = " << cl->
GetName() << std::endl;
1406 Long64_t oldid = reg->fCurrentObjId;
1407 TClass* oldcl = reg->fCurrentObjClass;
1409 reg->fCurrentObjId = objid;
1410 reg->fCurrentObjClass = cl;
1431 std::cout <<
"Store object " << objid <<
" of class " << cl->
GetName() <<
" normal = " << normstore <<
" sqltype = " <<
GetType() << std::endl;
1437 TSQLClassInfo* sqlinfo = reg->fFile->RequestSQLClassInfo(cl);
1438 TSqlRawBuffer rawdata(reg, sqlinfo);
1445 res = rawdata.IsAnyData();
1449 reg->AddRegCmd(objid, cl);
1451 reg->fCurrentObjId = oldid;
1452 reg->fCurrentObjClass = oldcl;
1483 if (cl==0)
return kFALSE;
1490 TSqlRawBuffer rawdata(reg, sqlinfo);
1495 columns.
AddColumn(reg->fFile->SQLObjectIdColumn(), reg->fCurrentObjId);
1502 Error(
"StoreClassInNormalForm",
"CAN NOT BE");
1510 Error(
"StoreClassInNormalForm",
"Element %s typ=%d has problem with normal store ", elem->
GetName(), columntyp);
1517 Int_t blobid = rawdata.fRawId;
1526 if (blobid==rawdata.fRawId)
1537 if (reg->fFile->GetUseSuffixes())
1543 reg->fFile->CreateClassTable(sqlinfo, columns.
TakeColInfos());
1545 reg->InsertToNormalTable(&columns, sqlinfo);
1562 buf.
Form(
"%s%d%s",
"[",ix,
"]");
1574 if (elem==0)
return kFALSE;
1581 std::cout <<
"Element " << elem->
GetName()
1582 <<
" type = " << typ
1583 <<
" column = " << columntyp << std::endl;
1591 Int_t len = value ? strlen(value) : 0;
1593 Int_t sizelimit = reg->fFile->SQLSmallTextTypeLimit();
1595 const char*
stype = reg->fFile->SQLSmallTextType();
1600 Int_t strid = reg->AddLongString(value);
1601 TString buf = reg->fFile->CodeLongString(reg->fCurrentObjId, strid);
1609 Long64_t objid = reg->fCurrentObjId;
1638 objid = reg->GetNextObjId();
1669 Error(
"kColNormObject",
"child->StoreObject fails");
1692 if (!normal)
return kFALSE;
1714 if (!normal)
return kFALSE;
1724 Error(
"StoreElementInNormalForm",
"Enexpected number %d for simple element %s",
NumChilds(), elem->
GetName());
1731 const char* value = child->
GetValue();
1732 if (value==0)
return kFALSE;
1734 const char* sqltype = reg->fFile->SQLCompatibleType(typ);
1745 Error(
"StoreElementInNormalForm",
"In fixed array %s only array node should be", elem->
GetName());
1750 const char* sqltype = reg->fFile->SQLCompatibleType(typ % 20);
1756 const char* value = child->
GetValue();
1757 if (value==0)
return kFALSE;
1762 while (index<last) {
1783 if (elem==0)
return kFALSE;
1796 const char* ns = reg->fFile->SQLNameSeparator();
1804 Long64_t objid = reg->GetNextObjId();
1809 sobjid.
Form(
"%lld", objid);
1831 if ((ver_cl==0) || (info_cl==0) || (ver_cl!=info_cl) ||
1862 if (sqlinfo==0)
return kFALSE;
1868 columns.
AddColumn(reg->fFile->SQLObjectIdColumn(), reg->fCurrentObjId);
1874 reg->fFile->CreateClassTable(sqlinfo, columns.
TakeColInfos());
1876 reg->InsertToNormalTable(&columns, sqlinfo);
1887 const char* value = 0;
1891 if (sqlinfo==0)
return kFALSE;
1895 columns.
AddColumn(reg->fFile->SQLObjectIdColumn(), reg->fCurrentObjId);
1898 reg->fFile->CreateClassTable(sqlinfo, columns.
TakeColInfos());
1900 reg->InsertToNormalTable(&columns, sqlinfo);
1918 if (len==0) len=curr;
else return kFALSE;
1921 if (lenbig==0) lenbig=curr;
else return kFALSE;
1924 if (chars==0) chars=curr;
else return kFALSE;
1928 if (len==0)
return kFALSE;
1929 if ((lenbig!=0) && ((chars==0) || (len==0)))
return kFALSE;
1932 value = chars->GetValue();
1956 if ((typ>0) && (typ<20) &&
2059 const char* elemname = elem->
GetName();
2149 std::cout <<
"TSQLStructure::LocateElementColumn " << elem->
GetName() <<
2150 " coltyp = " << coltype <<
" : " << elem->
GetType() <<
" len = " << elem->
GetArrayLength() << std::endl;
2154 const char* elemname = elem->
GetName();
2160 std::cout <<
" colname = " << colname <<
" in " <<
2179 const char* clname = elemname;
2183 if (version<0)
break;
2217 const char* strobjid = data->
GetValue();
2279 const char* value = data->
GetValue();
2289 value = buf2.
Data();
2291 Int_t len = (value==0) ? 0 : strlen(value);
2325 if (sqlinfo==0)
return kFALSE;
2328 if (tobjdata==0)
return kFALSE;
2341 const char* value = tobjdata->
GetValue();
2342 if ((value!=0) && (strlen(value)>0))
2356 if (sqlinfo==0)
return kFALSE;
2359 if (tstringdata==0)
return kFALSE;
2363 const char* value = tstringdata->
GetValue();
2365 Int_t len = (value==0) ? 0 : strlen(value);
2385 if (strcmp(quote,
"\"")==0) s.
ReplaceAll(
"\"",
"\\\"");
void SetObjectData(TSQLObjectData *objdata)
set element to be used for object data
Describe Streamer information for one class version.
static Int_t DefineElementColumnType(TStreamerElement *elem, TSQLFile *f)
defines which kind of column can be assigned for this element Possible cases kColSimple - basic data ...
virtual Bool_t SetLong64(Int_t, Long64_t)
Bool_t StoreTObject(TSqlRegistry *reg)
store data of TObject in special table workaround custom TObject streamer
const char * IdsTableIndex
TStreamerInfo * GetStreamerInfo() const
return TStreamerInfo* if type is kSqlStreamerInfo
Long64_t FindMaxObjectId()
define maximum reference id, used for objects
static Bool_t IsNumericType(Int_t typ)
defines if value is numeric and not requires quotes when writing
void ShiftToNextValue()
shift to next column or next row in blob data
TSQLStructure * GetChild(Int_t n) const
return child structure of index n
virtual const char * GetName() const
Return name of this collection.
const char * GetRawTableName() const
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
ClassImp(TSeqCollection) Int_t TSeqCollection TIter next(this)
Return index of object in collection.
Collectable string class.
Equal to TDataType's kchar.
Bool_t GetUseSuffixes() const
Int_t GetLast() const
Return index of last object in array.
void AddValue(const char *value, const char *tname=0)
Add child structure as value.
virtual void Delete(Option_t *option="")
Remove all objects from the array AND delete all heap based objects.
TString & ReplaceAll(const TString &s1, const TString &s2)
Bool_t GetClassInfo(TClass *&cl, Version_t &version)
provides class info if structure kSqlStreamerInfo or kSqlCustomClass
TSQLStructure * GetParent() const
const char * cfg_UseTransactions
TClass * GetCustomClass() const
return element custom class if strutures is kSqlCustomClass
Bool_t IsClassTableExist() const
static TString MakeArrayIndex(TStreamerElement *elem, Int_t n)
produce string with complete index like [1][2][0]
virtual Bool_t NextIteration()=0
void PrintLevel(Int_t level) const
print content of current structure
Int_t GetNumColumns()
returns number of columns in provided set
Int_t GetArrayLimit() const
Bool_t IsODBC() const
checks, if ODBC driver used for database connection
void SQLDeleteStatement(TSQLStatement *stmt)
delete statement and decrease counter
TObjArray * fColInfos
! array with TSQLClassColumnInfo, used later for TSQLClassInfo
void Add(TObject *obj)
This function may not be used (but we need to provide it since it is a pure virtual in TCollection)...
Int_t IsLongStringCode(Long64_t objid, const char *value)
Checks if this is long string code returns 0, if not or string id.
Contains information about tables specific to one class and version.
void SetVersion(const TClass *cl, Int_t version=-100)
set structure type as kSqlVersion
const char * cfg_LockingMode
const char * SQLIdentifierQuote() const
void SetObjectRef(Long64_t refid, const TClass *cl)
set structure type as kSqlObject
virtual Bool_t SetString(Int_t, const char *, Int_t=256)
TSQLObjectData * SqlObjectData(Long64_t objid, TSQLClassInfo *sqlinfo)
Creates TSQLObjectData for specifed object id and specified class.
void SetValue(const char *value, const char *tname=0)
set structure type as kSqlValue
TString & Prepend(const char *cs)
void SetParent(TSQLStructure *p)
Int_t GetElementNumber() const
returns number of TStremerElement in TStreamerInfo
Bool_t CheckNormalClassPair(TSQLStructure *vers, TSQLStructure *info)
check if pair of two element corresponds to start of object, stored in normal form ...
const char * ParentSuffix
const char * cfg_UseIndexes
Bool_t IsMySQL() const
checks, if MySQL database
TObjArray * TakeColInfos()
take ownership over colinfos
void SetStreamerInfo(const TStreamerInfo *info)
set structure type as kSqlStreamerInfo
TSQLObjectData is used in TBufferSQL2 class in reading procedure.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
const char * Data() const
void Add(TSQLStructure *child)
Add child strucure.
const char * StringsTable
const char * GetValue() const
returns value for different structure kinds has different sense For kSqlVersion it version...
Long64_t atol64(const char *value)
const char * TStringValue
static Bool_t UnpackTObject(TSQLFile *f, TBufferSQL2 *buf, TSQLObjectData *data, Long64_t objid, Int_t clversion)
Unpack TObject data in form, understodable by custom TObject streamer.
void SetStreamerElement(const TStreamerElement *elem, Int_t number)
set structure type as kSqlElement
const char * ObjectsTableIndex
const char Int_t const char TProof Int_t stype
TString fValue
! value of the table column
Bool_t RecognizeTString(const char *&value)
prove that structure containes TString data
std::map< std::string, std::string >::const_iterator iter
void ChildArrayIndex(Int_t index, Int_t cnt=1)
set array index for last child element if (cnt<=1) return;
This is hierarhical structure, which is created when data is written by TBufferSQL2.
TString & Append(const char *cs)
Bool_t StoreElementInNormalForm(TSqlRegistry *reg, TSQLTableData *columns)
tries to store element data in column
TObject * GetValue(const char *keyname) const
Returns a pointer to the value associated with keyname as name of the key.
TSQLStatement * SQLStatement(const char *cmd, Int_t bufsize=1000)
Produces SQL statement for currently conected DB server.
TClass * GetClass() const
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
const char * cfg_TablesType
TSQLClassInfo * GetInfo() const
Bool_t TryConvertObjectArray(TSqlRegistry *reg, TSqlRawBuffer *blobs)
tries to write array of objects as lis of object refereneces in streamer table, while objects itself ...
Bool_t SQLCanStatement()
Test if DB support statement and number of open statements is not exceeded.
Bool_t GetLongString(Long64_t objid, Int_t strid, TString &value)
Returns value of string, extracted from special table, where long strings are stored.
Int_t GetClassVersion() const
Int_t GetArrayDim() const
ClassImp(TSQLColumnData) TSQLColumnData
default constructor
Bool_t StoreTString(TSqlRegistry *reg)
store data of TString in special table it is required when TString stored as pointer and reference to...
Int_t LocateElementColumn(TSQLFile *f, TBufferSQL2 *buf, TSQLObjectData *data)
find column in TSQLObjectData object, which correspond to current element
virtual ~TSQLStructure()
destructor
static Bool_t UnpackTString(TSQLFile *f, TBufferSQL2 *buf, TSQLObjectData *data, Long64_t objid, Int_t clversion)
Unpack TString data in form, understodable by custom TString streamer.
TSQLObjectData * GetObjectData(Bool_t search=false)
searchs for objects data
static TString DefineElementColumnName(TStreamerElement *elem, TSQLFile *f, Int_t indx=0)
returns name of the column in class table for that element
const char * KeysTableIndex
Bool_t StoreObject(TSqlRegistry *reg, Long64_t objid, TClass *cl, Bool_t registerobj=kTRUE)
convert object data to sql statements if normal (columnwise) representation is not possible...
void AddColumn(const char *name, Long64_t value)
Add INT column to list of columns.
virtual void AddAtAndExpand(TObject *obj, Int_t idx)
Add object at position idx.
Access an SQL db via the TFile interface.
void SetCustomClass(const TClass *cl, Version_t version)
set structure type as kSqlCustomClass
Int_t GetMaxIndex(Int_t i) const
void ChangeValueOnly(const char *value)
change value of this structure used as "workaround" to keep object id in kSqlElement node ...
virtual void Delete(const char *namecycle="")
Delete object namecycle.
TString DefineSQLName(const char *fullname)
produce suitable name for column, taking into account length limitation
TSQLClassInfo * FindSQLClassInfo(const char *clname, Int_t version)
Return (if exists) TSQLClassInfo for specified class name and version.
const char * GetSQLName() const
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
Bool_t TestBit(UInt_t f) const
char * Form(const char *fmt,...)
const char * ObjectSuffix
const char * LongStrPrefix
virtual const char * GetName() const
Returns name of object.
void SetArray(Int_t sz=-1)
Set structure as array element.
Bool_t HasSQLName(const char *sqlname)
checks if columns list already has that sql name
The ROOT global object gROOT contains a list of all defined classes.
void AddObjectData(TSQLObjectData *objdata)
add element with pointer to object data
TSQLTableData(TSQLFile *f=0, TSQLClassInfo *info=0)
normal constructor
const char * SQLNameSeparator() const
ClassImp(TGuiBldHintsEditor) class TGuiBldHintsManager TGNumberEntry * fColumns
Version_t GetClassVersion() const
const char * TObjectUniqueId
const char * ObjectRef_Arr
Bool_t LocateColumn(const char *colname, Bool_t isblob=kFALSE)
locate column of that name in results
void DeleteValues()
Remove all (key,value) pairs from the map AND delete the values when they are allocated on the heap...
virtual ~TSQLColumnData()
TSQLColumnData destructor.
void PerformConversion(TSqlRegistry *reg, TSqlRawBuffer *blobs, const char *topname, Bool_t useblob=kFALSE)
perform conversion of structure to sql statements first tries convert it to normal form if fails...
Bool_t IsOracle() const
checks, if Oracle database
Bool_t IsNumeric(Int_t n)
identifies if column has numeric value
void SetCustomElement(TStreamerElement *elem)
set structure type as kSqlCustomElement
Bool_t PrepareForRawData()
prepare to read data from raw table
const char * GetValueType() const
return value type if structure is kSqlValue
Converts data to SQL statements or read data from SQL tables.
const Int_t Ids_FirstObject
Bool_t CreateRawTable(TSQLClassInfo *sqlinfo)
Create the raw table.
void SetObjectPointer(Long64_t ptrid)
set structure type as kSqlPointer
void AddVersion(const TClass *cl, Int_t version=-100)
add child as version
static const char * GetSimpleTypeName(Int_t typ)
provides name for basic types used as suffix for column name or field suffix in raw table ...
const char * GetValue() const
virtual const char * GetName() const
Returns name of object.
void AddUnpack(const char *tname, const char *value)
add emulated data this used to place version or TObject raw data, read from normal tables ...
const char * GetClassTableName() const
virtual TClass * GetClassPointer() const
Returns a pointer to the TClass of this element.
const Int_t Ids_StreamerInfos
Int_t NumChilds() const
number of child structures
const char * TObjectProcessId
TMap implements an associative array of (key,value) pairs using a THashTable for efficient retrieval ...
const char * GetColumn(Int_t n)
returm column value
TStreamerElement * GetElement() const
return TStremerElement* if type is kSqlElement
static void AddStrBrackets(TString &s, const char *quote)
adds quotes arround string value and replaces some special symbols
Int_t GetRepeatCounter() const
TMemberStreamer * GetStreamer() const
Return the local streamer object.
const char * cfg_ArrayLimit
static Vc_ALWAYS_INLINE int_v max(const int_v &x, const int_v &y)
Mother of all ROOT objects.
Version_t GetCustomClassVersion() const
return custom class version if strutures is kSqlCustomClass
const char * SQLValueQuote() const
TObject * Last() const
Return the object in the last filled slot. Returns 0 if no entries.
void AddUnpackInt(const char *tname, Int_t value)
emulate integer value in raw data
Bool_t StoreClassInNormalForm(TSqlRegistry *reg)
produces data for complete class table where not possible, raw data for some elements are created ...
Bool_t SqlObjectInfo(Long64_t objid, TString &clname, Version_t &version)
Returns object info like classname and version Should be taken from buffer, which is produced in the ...
Bool_t VerifyLongStringTable()
Checks that table for big strings is exists If not, will be created.
const char * PointerSuffix
const char * ObjectsTable
Long64_t DefineObjectId(Bool_t recursive=kTRUE)
defines current object id, to which this structure belong make life complicated, because some objects...
TClass * GetObjectClass() const
return object class if type kSqlObject
Int_t SQLSmallTextTypeLimit() const
virtual Bool_t Process()=0
Bool_t StoreObjectInNormalForm(TSqlRegistry *reg)
this function verify object child elements and calls transformation to class table ...
TObject * At(Int_t idx) const
Bool_t ConvertToTables(TSQLFile *f, Long64_t keyid, TObjArray *cmds)
Convert structure to sql statements This function is called immidiately after TBufferSQL2 produces th...
virtual Bool_t SetInt(Int_t, Int_t)
Int_t SQLMaxIdentifierLength()
returns maximum allowed length of identifiers
virtual void Print(Option_t *option="") const
print content of complete structure
Int_t GetArrayIndex() const
void Resize(Ssiz_t n)
Resize the string. Truncate or add blanks as necessary.
TClass * GetVersionClass() const
return class for version tag if type is kSqlVersion
TObjArray fColumns
! collection of columns
Int_t GetArrayLength() const
const char * cfg_UseSufixes
virtual ~TSQLTableData()
destructor
void SetArrayIndex(Int_t indx, Int_t cnt=1)
set array index for this structure
const char * cfg_ModifyCounter
void SetClassStreamer(const TClass *cl)
set structure type as kSqlClassStreamer