transactd 2.3.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/{BUILD_UNIX-JA → BUILD_UNIX-JA.md} +6 -6
- data/CMakeLists.txt +20 -15
- data/{README-JA → README-JA.md} +23 -23
- data/{README → README.md} +22 -24
- data/RELEASE_NOTE +120 -0
- data/RELEASE_NOTE-JA +110 -0
- data/bin/common/tdclc_32_2_4.dll +0 -0
- data/bin/common/tdclc_64_2_4.dll +0 -0
- data/build/common/get_ruby_path.cmake +1 -1
- data/build/swig/ruby/tdclrb_wrap.cpp +1319 -830
- data/build/swig/tdcl.i +22 -2
- data/build/tdclc/tdclc.cbproj +1 -1
- data/build/tdclc/tdclc.rc +4 -4
- data/build/tdclcpp/tdclcpp.rc +4 -4
- data/build/tdclcpp/tdclcpp_bc.cbproj +2 -1
- data/build/tdclrb/CMakeLists.txt +6 -1
- data/build/tdclrb/bldgem/extconf.rb +5 -1
- data/build/tdclrb/tdclrb.rc +4 -4
- data/source/bzs/db/engine/mysql/database.cpp +44 -40
- data/source/bzs/db/engine/mysql/database.h +28 -8
- data/source/bzs/db/engine/mysql/dbManager.cpp +2 -0
- data/source/bzs/db/engine/mysql/dbManager.h +2 -7
- data/source/bzs/db/engine/mysql/mysqlInternal.h +79 -7
- data/source/bzs/db/protocol/hs/hsCommandExecuter.h +5 -1
- data/source/bzs/db/protocol/tdap/client/activeTable.cpp +32 -8
- data/source/bzs/db/protocol/tdap/client/activeTable.h +17 -4
- data/source/bzs/db/protocol/tdap/client/activeTableImple.h +10 -4
- data/source/bzs/db/protocol/tdap/client/client.cpp +51 -6
- data/source/bzs/db/protocol/tdap/client/client.h +41 -11
- data/source/bzs/db/protocol/tdap/client/connMgr.cpp +51 -15
- data/source/bzs/db/protocol/tdap/client/connMgr.h +6 -1
- data/source/bzs/db/protocol/tdap/client/database.cpp +26 -5
- data/source/bzs/db/protocol/tdap/client/database.h +3 -2
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +38 -28
- data/source/bzs/db/protocol/tdap/client/dbDef.h +1 -1
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +2 -32
- data/source/bzs/db/protocol/tdap/client/field.cpp +0 -1
- data/source/bzs/db/protocol/tdap/client/filter.h +60 -33
- data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +2 -5
- data/source/bzs/db/protocol/tdap/client/memRecord.cpp +9 -0
- data/source/bzs/db/protocol/tdap/client/memRecord.h +1 -0
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +99 -48
- data/source/bzs/db/protocol/tdap/client/nsDatabase.h +5 -2
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +76 -26
- data/source/bzs/db/protocol/tdap/client/nsTable.h +6 -4
- data/source/bzs/db/protocol/tdap/client/request.h +28 -11
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +19 -11
- data/source/bzs/db/protocol/tdap/client/table.cpp +157 -70
- data/source/bzs/db/protocol/tdap/client/table.h +20 -5
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +57 -4
- data/source/bzs/db/protocol/tdap/client/trdormapi.h +55 -20
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +65 -31
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +2 -0
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +24 -36
- data/source/bzs/db/protocol/tdap/mysql/request.h +1 -1
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +98 -18
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +12 -7
- data/source/bzs/db/protocol/tdap/tdapRequest.h +3 -8
- data/source/bzs/db/protocol/tdap/tdapSchema.cpp +1 -9
- data/source/bzs/db/protocol/tdap/tdapSchema.h +31 -1
- data/source/bzs/db/protocol/tdap/tdapcapi.h +49 -6
- data/source/bzs/db/protocol/tdap/uri.h +41 -6
- data/source/bzs/db/transactd/appModule.cpp +0 -1
- data/source/bzs/db/transactd/appModule.h +0 -2
- data/source/bzs/db/transactd/connManager.cpp +202 -33
- data/source/bzs/db/transactd/connManager.h +11 -4
- data/source/bzs/db/transactd/connectionRecord.h +19 -5
- data/source/bzs/db/transactd/transactd.cpp +39 -8
- data/source/bzs/env/crosscompile.cpp +1 -1
- data/source/bzs/example/queryData.cpp +1 -1
- data/source/bzs/netsvc/client/iconnection.h +2 -0
- data/source/bzs/netsvc/client/tcpClient.cpp +48 -26
- data/source/bzs/netsvc/client/tcpClient.h +171 -106
- data/source/bzs/netsvc/server/IAppModule.h +0 -1
- data/source/bzs/netsvc/server/serverPipe.cpp +5 -1
- data/source/bzs/netsvc/server/serverPipe.h +2 -1
- data/source/bzs/test/tdclatl/test_query_atl.js +105 -0
- data/source/bzs/test/tdclphp/transactd_Test.php +129 -11
- data/source/bzs/test/tdclrb/transactd_spec.rb +74 -2
- data/source/bzs/test/transactdBench/scaling_bench.cpp +1 -1
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +45 -20
- data/source/global/tdclatl/Bookmark.cpp +28 -0
- data/source/global/tdclatl/Bookmark.h +65 -0
- data/source/global/tdclatl/Database.cpp +2 -2
- data/source/global/tdclatl/Database.h +1 -3
- data/source/global/tdclatl/DbDef.cpp +6 -0
- data/source/global/tdclatl/DbDef.h +1 -0
- data/source/global/tdclatl/QueryBase.cpp +29 -0
- data/source/global/tdclatl/QueryBase.h +4 -0
- data/source/global/tdclatl/Record.cpp +14 -2
- data/source/global/tdclatl/Record.h +1 -1
- data/source/global/tdclatl/Table.cpp +80 -16
- data/source/global/tdclatl/Table.h +23 -8
- data/source/global/tdclatl/_IDatabaseEvents_CP.h +39 -0
- data/source/global/tdclatl/activeTable.cpp +2 -2
- data/source/global/tdclatl/activeTable.h +1 -1
- data/source/global/tdclatl/tdclatl.idl +64 -14
- metadata +12 -12
- data/bin/common/tdclc_32_2_3.dll +0 -0
- data/bin/common/tdclc_64_2_3.dll +0 -0
- data/build/tdclcpp/BUILDNUMBER.txt +0 -1
- data/build/tdclrb/BUILDNUMBER.txt +0 -1
- /data/{BUILD_WIN-JA → BUILD_WIN-JA.md} +0 -0
- /data/{README_ORMSRCGEN-JA → README_ORMSRCGEN-JA.md} +0 -0
- /data/{README_ORMSRCGEN → README_ORMSRCGEN.md} +0 -0
|
@@ -878,9 +878,13 @@ template <class Database_Ptr> inline void dropDatabase(Database_Ptr db)
|
|
|
878
878
|
}
|
|
879
879
|
|
|
880
880
|
template <class Database_Ptr>
|
|
881
|
-
inline table_ptr openTable(Database_Ptr db, const _TCHAR* name,
|
|
881
|
+
inline table_ptr openTable(Database_Ptr db, const _TCHAR* name,
|
|
882
|
+
short mode = TD_OPEN_NORMAL,
|
|
883
|
+
bool autoCreate = true, const _TCHAR* ownerName = NULL,
|
|
884
|
+
const _TCHAR* uri = NULL)
|
|
882
885
|
{
|
|
883
|
-
table_ptr p(db->openTable(name, mode
|
|
886
|
+
table_ptr p(db->openTable(name, mode, autoCreate, ownerName, uri),
|
|
887
|
+
releaseTable);
|
|
884
888
|
if (db->stat())
|
|
885
889
|
nstable::throwError((std::_tstring(_T("Open table ")) + name).c_str(),
|
|
886
890
|
db->stat());
|
|
@@ -888,9 +892,14 @@ inline table_ptr openTable(Database_Ptr db, const _TCHAR* name, short mode = TD_
|
|
|
888
892
|
}
|
|
889
893
|
|
|
890
894
|
template <class Database_Ptr>
|
|
891
|
-
inline table_ptr openTable(Database_Ptr db, short tableid,
|
|
895
|
+
inline table_ptr openTable(Database_Ptr db, short tableid,
|
|
896
|
+
short mode = TD_OPEN_NORMAL,
|
|
897
|
+
bool autoCreate = true, const _TCHAR* ownerName = NULL,
|
|
898
|
+
const _TCHAR* uri = NULL)
|
|
892
899
|
{
|
|
893
|
-
table_ptr p(db->openTable(tableid, mode
|
|
900
|
+
table_ptr p(db->openTable(tableid, mode, autoCreate, ownerName, uri),
|
|
901
|
+
releaseTable);
|
|
902
|
+
|
|
894
903
|
if (db->stat())
|
|
895
904
|
{
|
|
896
905
|
_TCHAR buf[50];
|
|
@@ -952,6 +961,23 @@ inline void insertTable(dbdef* def, short id, const _TCHAR* name,
|
|
|
952
961
|
def->stat());
|
|
953
962
|
}
|
|
954
963
|
|
|
964
|
+
inline void deleteTable(dbdef* def, short id)
|
|
965
|
+
{
|
|
966
|
+
def->deleteTable(id);
|
|
967
|
+
if (def->stat() != 0)
|
|
968
|
+
nstable::throwError(_T("Delete tabledef "), def->stat());
|
|
969
|
+
|
|
970
|
+
}
|
|
971
|
+
|
|
972
|
+
|
|
973
|
+
inline void renumberTable(dbdef* def, short id, short newid)
|
|
974
|
+
{
|
|
975
|
+
def->renumberTable(id, newid);
|
|
976
|
+
if (def->stat() != 0)
|
|
977
|
+
nstable::throwError(_T("Renumber table id "), def->stat());
|
|
978
|
+
|
|
979
|
+
}
|
|
980
|
+
|
|
955
981
|
inline fielddef* insertField(dbdef* def, short tableid, short fieldNum,
|
|
956
982
|
const _TCHAR* name, uchar_td type, ushort_td len)
|
|
957
983
|
{
|
|
@@ -967,6 +993,13 @@ inline fielddef* insertField(dbdef* def, short tableid, short fieldNum,
|
|
|
967
993
|
return fd;
|
|
968
994
|
}
|
|
969
995
|
|
|
996
|
+
inline void deleteField(dbdef* def, short tableid, short fieldNum)
|
|
997
|
+
{
|
|
998
|
+
def->deleteField(tableid, fieldNum);
|
|
999
|
+
if (def->stat() != 0)
|
|
1000
|
+
nstable::throwError(_T("Delete fielddef "), def->stat());
|
|
1001
|
+
}
|
|
1002
|
+
|
|
970
1003
|
inline keydef* insertKey(dbdef* def, short tableid, short insertIndex)
|
|
971
1004
|
{
|
|
972
1005
|
keydef* kd = def->insertKey(tableid, insertIndex);
|
|
@@ -976,6 +1009,26 @@ inline keydef* insertKey(dbdef* def, short tableid, short insertIndex)
|
|
|
976
1009
|
return kd;
|
|
977
1010
|
}
|
|
978
1011
|
|
|
1012
|
+
inline void deleteKey(dbdef* def, short tableid, short keynum)
|
|
1013
|
+
{
|
|
1014
|
+
def->deleteKey(tableid, keynum);
|
|
1015
|
+
if (def->stat() != 0)
|
|
1016
|
+
nstable::throwError(_T("Delete keydef "), def->stat());
|
|
1017
|
+
}
|
|
1018
|
+
|
|
1019
|
+
inline void validateTableDef(dbdef* def, short tableid)
|
|
1020
|
+
{
|
|
1021
|
+
def->validateTableDef(tableid);
|
|
1022
|
+
if (def->stat() != 0)
|
|
1023
|
+
{
|
|
1024
|
+
std::_tstring s;
|
|
1025
|
+
if (def->tableDefs(tableid))
|
|
1026
|
+
s = def->tableDefs(tableid)->tableName();
|
|
1027
|
+
nstable::throwError((std::_tstring(_T("Validate tabledef ")) + s).c_str(),
|
|
1028
|
+
def->stat());
|
|
1029
|
+
}
|
|
1030
|
+
}
|
|
1031
|
+
|
|
979
1032
|
inline void updateTableDef(dbdef* def, short tableid)
|
|
980
1033
|
{
|
|
981
1034
|
def->updateTableDef(tableid);
|
|
@@ -323,13 +323,31 @@ class activeObject : boost::noncopyable
|
|
|
323
323
|
m_tb = mgr->table(name);
|
|
324
324
|
}
|
|
325
325
|
|
|
326
|
-
void init(database_ptr& db, const _TCHAR* name)
|
|
326
|
+
void init(database_ptr& db, const _TCHAR* name, short mode)
|
|
327
327
|
{
|
|
328
|
-
m_tb = openTable(db, name);
|
|
328
|
+
m_tb = openTable(db, name, mode);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
void init(database* db, const _TCHAR* name, short mode)
|
|
332
|
+
{
|
|
333
|
+
m_tb = openTable(db, name, mode);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/*void init(idatabaseManager* mgr, short tableindex)
|
|
337
|
+
{
|
|
338
|
+
m_tb = mgr->table(tableindex);
|
|
339
|
+
}*/
|
|
340
|
+
|
|
341
|
+
void init(database_ptr& db, short tableindex, short mode)
|
|
342
|
+
{
|
|
343
|
+
m_tb = openTable(db, tableindex, mode);
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
void init(database* db, short tableindex, short mode)
|
|
347
|
+
{
|
|
348
|
+
m_tb = openTable(db, tableindex, mode);
|
|
329
349
|
}
|
|
330
350
|
|
|
331
|
-
void init(database* db, const _TCHAR* name) { m_tb = openTable(db, name); }
|
|
332
|
-
|
|
333
351
|
void prepare(const pq_handle& q)
|
|
334
352
|
{
|
|
335
353
|
m_tb->setPrepare(q);
|
|
@@ -353,10 +371,10 @@ public:
|
|
|
353
371
|
initFdi(m_fdi, m_tb.get());
|
|
354
372
|
}
|
|
355
373
|
|
|
356
|
-
explicit activeObject(database_ptr& db)
|
|
374
|
+
explicit activeObject(database_ptr& db, short mode = TD_OPEN_NORMAL)
|
|
357
375
|
: m_fdi(createFdi((FDI*)0)), m_map(*m_fdi), m_option(0)
|
|
358
376
|
{
|
|
359
|
-
init(db, m_map.getTableName());
|
|
377
|
+
init(db, m_map.getTableName(), mode);
|
|
360
378
|
if (table() && m_fdi)
|
|
361
379
|
initFdi(m_fdi, m_tb.get());
|
|
362
380
|
}
|
|
@@ -369,29 +387,46 @@ public:
|
|
|
369
387
|
initFdi(m_fdi, m_tb.get());
|
|
370
388
|
}
|
|
371
389
|
|
|
372
|
-
/*explicit activeObject(
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
390
|
+
/*explicit activeObject(idatabaseManager* mgr, short tableIndex)
|
|
391
|
+
: m_fdi(createFdi((FDI*)0)), m_map(*m_fdi), m_option(0)
|
|
392
|
+
{
|
|
393
|
+
init(mgr, tableIndex);
|
|
394
|
+
if (table() && m_fdi)
|
|
395
|
+
initFdi(m_fdi, m_tb.get());
|
|
396
|
+
}*/
|
|
397
|
+
|
|
398
|
+
explicit activeObject(database_ptr& db, const _TCHAR* tableName,
|
|
399
|
+
short mode = TD_OPEN_NORMAL)
|
|
400
|
+
: m_fdi(createFdi((FDI*)0)), m_map(*m_fdi), m_option(0)
|
|
401
|
+
{
|
|
402
|
+
init(db, tableName, mode);
|
|
403
|
+
if (table() && m_fdi)
|
|
404
|
+
initFdi(m_fdi, m_tb.get());
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
explicit activeObject(database* db, const _TCHAR* tableName,
|
|
408
|
+
short mode = TD_OPEN_NORMAL)
|
|
409
|
+
: m_fdi(createFdi((FDI*)0)), m_map(*m_fdi), m_option(0)
|
|
410
|
+
{
|
|
411
|
+
init(db, tableName, mode);
|
|
412
|
+
if (table() && m_fdi)
|
|
413
|
+
initFdi(m_fdi, m_tb.get());
|
|
414
|
+
}
|
|
382
415
|
|
|
383
|
-
explicit activeObject(database_ptr& db,
|
|
416
|
+
explicit activeObject(database_ptr& db, short tableIndex,
|
|
417
|
+
short mode = TD_OPEN_NORMAL)
|
|
384
418
|
: m_fdi(createFdi((FDI*)0)), m_map(*m_fdi), m_option(0)
|
|
385
419
|
{
|
|
386
|
-
init(db,
|
|
420
|
+
init(db, tableIndex, mode);
|
|
387
421
|
if (table() && m_fdi)
|
|
388
422
|
initFdi(m_fdi, m_tb.get());
|
|
389
423
|
}
|
|
390
424
|
|
|
391
|
-
explicit activeObject(database* db,
|
|
425
|
+
explicit activeObject(database* db, short tableIndex,
|
|
426
|
+
short mode = TD_OPEN_NORMAL)
|
|
392
427
|
: m_fdi(createFdi((FDI*)0)), m_map(*m_fdi), m_option(0)
|
|
393
428
|
{
|
|
394
|
-
init(db,
|
|
429
|
+
init(db, tableIndex, mode);
|
|
395
430
|
if (table() && m_fdi)
|
|
396
431
|
initFdi(m_fdi, m_tb.get());
|
|
397
432
|
}
|
|
@@ -66,26 +66,6 @@ uint_td copyToRecordImage(uchar* rec, void* p, uint_td size, uint_td offset)
|
|
|
66
66
|
return offset + size;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
bool isStringType(char type)
|
|
70
|
-
{
|
|
71
|
-
switch (type)
|
|
72
|
-
{
|
|
73
|
-
case ft_zstring:
|
|
74
|
-
case ft_string:
|
|
75
|
-
case ft_mychar:
|
|
76
|
-
case ft_myvarchar:
|
|
77
|
-
case ft_myvarbinary:
|
|
78
|
-
case ft_wzstring:
|
|
79
|
-
case ft_wstring:
|
|
80
|
-
case ft_mywchar:
|
|
81
|
-
case ft_mywvarchar:
|
|
82
|
-
case ft_mywvarbinary:
|
|
83
|
-
return true;
|
|
84
|
-
default:
|
|
85
|
-
return false;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
69
|
uchar_td convFieldType(enum enum_field_types type, uint flags, bool binary,
|
|
90
70
|
bool unicode)
|
|
91
71
|
{
|
|
@@ -226,7 +206,7 @@ short schemaBuilder::insertMetaRecord(table* mtb, table* src, int id)
|
|
|
226
206
|
sg.flags.bit4 = (j != kd.segmentCount - 1); // segment
|
|
227
207
|
sg.flags.bit8 = 1; // extend key type
|
|
228
208
|
sg.flags.bit9 = ks.null_bit ? 1 : 0; // null key
|
|
229
|
-
if (
|
|
209
|
+
if (isStringTypeForIndex(convFieldType(
|
|
230
210
|
src->fieldType(sg.fieldNum),
|
|
231
211
|
src->fieldFlags(sg.fieldNum),
|
|
232
212
|
isBinary(src->fieldCharset(i)),
|
|
@@ -252,10 +232,10 @@ short schemaBuilder::insertMetaRecord(table* mtb, table* src, int id)
|
|
|
252
232
|
return mtb->stat();
|
|
253
233
|
}
|
|
254
234
|
|
|
255
|
-
bool isFrmFile(const std::string& name)
|
|
235
|
+
bool isFrmFile(const std::string& name, bool notschema=true)
|
|
256
236
|
{
|
|
257
237
|
size_t pos = name.find(TRANSACTD_SCHEMANAME);
|
|
258
|
-
if (pos != std::string::npos)
|
|
238
|
+
if (pos != std::string::npos && notschema)
|
|
259
239
|
return false;
|
|
260
240
|
// First of name is '#' that is alter table temp file.
|
|
261
241
|
if (name.size() && name[0] == '#')
|
|
@@ -266,6 +246,48 @@ bool isFrmFile(const std::string& name)
|
|
|
266
246
|
return false;
|
|
267
247
|
}
|
|
268
248
|
|
|
249
|
+
void schemaBuilder::listSchemaTable(database* db, std::vector<std::string>& shcemaNames)
|
|
250
|
+
{
|
|
251
|
+
char path[FN_REFLEN + 1];
|
|
252
|
+
build_table_filename(path, sizeof(path) - 1, db->name().c_str(), "", "", 0);
|
|
253
|
+
std::string s = path;
|
|
254
|
+
fs::path p = s;
|
|
255
|
+
fs::directory_iterator it(p);
|
|
256
|
+
fs::directory_iterator end;
|
|
257
|
+
shcemaNames.clear();
|
|
258
|
+
|
|
259
|
+
for (fs::directory_iterator it(p); it != end; ++it)
|
|
260
|
+
{
|
|
261
|
+
if (!is_directory(*it))
|
|
262
|
+
{
|
|
263
|
+
std::string s = it->path().filename().string();
|
|
264
|
+
if (isFrmFile(s, false))
|
|
265
|
+
{
|
|
266
|
+
filename_to_tablename(it->path().stem().string().c_str(), path,
|
|
267
|
+
FN_REFLEN);
|
|
268
|
+
table* tb = NULL;
|
|
269
|
+
try
|
|
270
|
+
{
|
|
271
|
+
tb = db->openTable(path, TD_OPEN_READONLY, NULL);
|
|
272
|
+
}
|
|
273
|
+
catch(...){}
|
|
274
|
+
if (!tb) break;
|
|
275
|
+
if (!tb->isView())
|
|
276
|
+
{
|
|
277
|
+
LEX_STRING& comment = tb->internalTable()->s->comment;
|
|
278
|
+
const char* p = comment.str;
|
|
279
|
+
if ((comment.length > 8) && strstr(p,"%@%02.000") &&
|
|
280
|
+
(tb->fields() == 2) && (tb->keys() == 1))
|
|
281
|
+
{
|
|
282
|
+
shcemaNames.push_back(tb->name());
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
db->closeTable(tb);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
269
291
|
short schemaBuilder::execute(database* db, table* mtb)
|
|
270
292
|
{
|
|
271
293
|
char path[FN_REFLEN + 1];
|
|
@@ -277,7 +299,8 @@ short schemaBuilder::execute(database* db, table* mtb)
|
|
|
277
299
|
fs::directory_iterator end;
|
|
278
300
|
int id = 0;
|
|
279
301
|
short stat = 0;
|
|
280
|
-
|
|
302
|
+
std::vector<table*> tables;
|
|
303
|
+
|
|
281
304
|
for (fs::directory_iterator it(p); it != end; ++it)
|
|
282
305
|
{
|
|
283
306
|
if (!is_directory(*it))
|
|
@@ -288,17 +311,28 @@ short schemaBuilder::execute(database* db, table* mtb)
|
|
|
288
311
|
filename_to_tablename(it->path().stem().string().c_str(), path,
|
|
289
312
|
FN_REFLEN);
|
|
290
313
|
table* tb = db->openTable(path, TD_OPEN_READONLY, NULL);
|
|
291
|
-
if (!tb)
|
|
292
|
-
return db->stat();
|
|
314
|
+
if (!tb) break;
|
|
293
315
|
if (!tb->isView())
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
}
|
|
316
|
+
tables.push_back(tb);
|
|
317
|
+
else
|
|
318
|
+
db->closeTable(tb);
|
|
298
319
|
}
|
|
299
320
|
}
|
|
300
321
|
}
|
|
301
|
-
|
|
322
|
+
if (db->stat()) return db->stat();
|
|
323
|
+
|
|
324
|
+
{
|
|
325
|
+
smartTransction trn(db);
|
|
326
|
+
for (size_t i = 0; i < tables.size(); ++i)
|
|
327
|
+
{
|
|
328
|
+
if ((stat = insertMetaRecord(mtb, tables[i], ++id)) != 0)
|
|
329
|
+
break;
|
|
330
|
+
}
|
|
331
|
+
if (stat == 0) trn.end();
|
|
332
|
+
|
|
333
|
+
}
|
|
334
|
+
for (size_t i = 0; i < tables.size(); ++i)
|
|
335
|
+
db->closeTable(tables[i]);
|
|
302
336
|
return stat;
|
|
303
337
|
}
|
|
304
338
|
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
|
|
22
22
|
#include <bzs/db/protocol/tdap/tdapSchema.h>
|
|
23
23
|
#include <string>
|
|
24
|
+
#include <vector>
|
|
24
25
|
|
|
25
26
|
namespace bzs
|
|
26
27
|
{
|
|
@@ -52,6 +53,7 @@ public:
|
|
|
52
53
|
schemaBuilder();
|
|
53
54
|
~schemaBuilder();
|
|
54
55
|
short execute(engine::mysql::database* db, engine::mysql::table* mtb);
|
|
56
|
+
static void listSchemaTable(engine::mysql::database* db, std::vector<std::string>& shcemaNames);
|
|
55
57
|
};
|
|
56
58
|
|
|
57
59
|
} // namespace mysql
|
|
@@ -691,9 +691,10 @@ public:
|
|
|
691
691
|
bool valid = !(forword ? gt : le);
|
|
692
692
|
|
|
693
693
|
// case in-sencitive, Index judge need clinet and server are same option.
|
|
694
|
-
bool
|
|
695
|
-
bool
|
|
696
|
-
|
|
694
|
+
bool is_cl_casein = ((fd->logType & CMPLOGICAL_CASEINSENSITIVE) != 0);
|
|
695
|
+
bool is_srv_casein = ((key->key_part[segmentIndex].field->flags & BINARY_FLAG) == 0) &&
|
|
696
|
+
isStringType(fd->type);
|
|
697
|
+
if (valid && (is_cl_casein == is_srv_casein))
|
|
697
698
|
{
|
|
698
699
|
m_keySeg = (unsigned char)segmentIndex + 1;
|
|
699
700
|
m_judgeType = (comp == eEqual) ? 2 : 1;
|
|
@@ -950,7 +951,7 @@ class resultWriter
|
|
|
950
951
|
const extResultDef* m_def;
|
|
951
952
|
bool m_noBookmark;
|
|
952
953
|
|
|
953
|
-
short doWrite(position* pos, unsigned int
|
|
954
|
+
short doWrite(position* pos, const unsigned char* bookmark, int bmlen)
|
|
954
955
|
{
|
|
955
956
|
// write recLength space;
|
|
956
957
|
unsigned short recLen = 0;
|
|
@@ -959,7 +960,7 @@ class resultWriter
|
|
|
959
960
|
|
|
960
961
|
// write bookmark
|
|
961
962
|
if (!m_noBookmark)
|
|
962
|
-
m_nw->asyncWrite((const char*)
|
|
963
|
+
m_nw->asyncWrite((const char*)bookmark, bmlen);
|
|
963
964
|
|
|
964
965
|
// if pos ==NULL , that is not found record in a TD_KEY_SEEK_MULTI
|
|
965
966
|
// operation
|
|
@@ -1010,6 +1011,7 @@ class resultWriter
|
|
|
1010
1011
|
}
|
|
1011
1012
|
|
|
1012
1013
|
public:
|
|
1014
|
+
resultWriter() : m_nw(NULL), m_def(NULL){}
|
|
1013
1015
|
|
|
1014
1016
|
void init(netsvc::server::netWriter* nw, const extResultDef* def,
|
|
1015
1017
|
bool noBookmark)
|
|
@@ -1019,15 +1021,19 @@ public:
|
|
|
1019
1021
|
m_noBookmark = noBookmark;
|
|
1020
1022
|
}
|
|
1021
1023
|
|
|
1022
|
-
short write(position* pos, unsigned int
|
|
1024
|
+
short write(position* pos, const unsigned char* bookmark, int len)
|
|
1023
1025
|
{
|
|
1024
|
-
return doWrite(pos, bookmark);
|
|
1026
|
+
return doWrite(pos, bookmark, len);
|
|
1025
1027
|
}
|
|
1026
1028
|
|
|
1027
1029
|
inline unsigned int end()
|
|
1028
1030
|
{
|
|
1029
|
-
m_nw
|
|
1030
|
-
|
|
1031
|
+
if (m_nw)
|
|
1032
|
+
{
|
|
1033
|
+
m_nw->asyncWrite(NULL, 0, netsvc::server::netWriter::writeEnd);
|
|
1034
|
+
return m_nw->resultLen();
|
|
1035
|
+
}
|
|
1036
|
+
return 0;
|
|
1031
1037
|
}
|
|
1032
1038
|
|
|
1033
1039
|
const char* resultBuffer() { return m_nw->ptr(); }
|
|
@@ -1073,7 +1079,7 @@ public:
|
|
|
1073
1079
|
if(p->readMapSize)
|
|
1074
1080
|
{
|
|
1075
1081
|
bm.setTable(tb);
|
|
1076
|
-
if (m_seeksMode)
|
|
1082
|
+
if (m_seeksMode && !(req->itype & FILTER_TYPE_SEEKS_BOOKMARKS))
|
|
1077
1083
|
addKeysegFieldMap(tb);
|
|
1078
1084
|
if (p->readMapSize)
|
|
1079
1085
|
p->copyBitmapTo(bm.getReadBitmap());
|
|
@@ -1126,7 +1132,8 @@ public:
|
|
|
1126
1132
|
if ((rd->fieldCount > 1) ||
|
|
1127
1133
|
((rd->fieldCount == 1) &&
|
|
1128
1134
|
(rd->field[0].len < m_position.recordLenCl())))
|
|
1129
|
-
ret = convResultPosToFieldNum(tb, noBookmark, rd, m_seeksMode
|
|
1135
|
+
ret = convResultPosToFieldNum(tb, noBookmark, rd, m_seeksMode,
|
|
1136
|
+
(req->itype & FILTER_TYPE_SEEKS_BOOKMARKS) != 0);
|
|
1130
1137
|
|
|
1131
1138
|
nw->beginExt(tb->blobFields() != 0);
|
|
1132
1139
|
m_writer.init(nw, rd, noBookmark);
|
|
@@ -1154,7 +1161,7 @@ public:
|
|
|
1154
1161
|
|
|
1155
1162
|
// TODO This convert is move to client. but legacy app is need this
|
|
1156
1163
|
short convResultPosToFieldNum(engine::mysql::table* tb, bool noBookmark,
|
|
1157
|
-
const extResultDef* rd, bool seeksMode)
|
|
1164
|
+
const extResultDef* rd, bool seeksMode, bool seekBookmark)
|
|
1158
1165
|
{
|
|
1159
1166
|
int blobs = 0;
|
|
1160
1167
|
bm.setTable(tb);
|
|
@@ -1179,7 +1186,7 @@ public:
|
|
|
1179
1186
|
fd = fd->next();
|
|
1180
1187
|
}
|
|
1181
1188
|
}
|
|
1182
|
-
else
|
|
1189
|
+
else if (!seekBookmark)
|
|
1183
1190
|
addKeysegFieldMap(tb);
|
|
1184
1191
|
|
|
1185
1192
|
// if need bookmark , add primary key fields
|
|
@@ -1220,39 +1227,20 @@ public:
|
|
|
1220
1227
|
return REC_MACTH;
|
|
1221
1228
|
}
|
|
1222
1229
|
|
|
1223
|
-
short write(const unsigned char*
|
|
1230
|
+
short write(const unsigned char* bookmarkPtr,
|
|
1224
1231
|
unsigned int bmlen /*, short stat=0*/)
|
|
1225
1232
|
{
|
|
1226
1233
|
unsigned int bookmark = 0;
|
|
1227
1234
|
// if bmPtr ==NULL , that is not found record in a TD_KEY_SEEK_MULTI
|
|
1228
1235
|
// operation
|
|
1229
1236
|
// and set error code to bookmark also STATUS_NOT_FOUND_TI
|
|
1230
|
-
if (
|
|
1237
|
+
if (bookmarkPtr == NULL)
|
|
1231
1238
|
{
|
|
1232
1239
|
// bookmark = stat;
|
|
1233
|
-
return m_writer.write(NULL, bookmark);
|
|
1240
|
+
return m_writer.write(NULL, (const unsigned char*)&bookmark, sizeof(bookmark));
|
|
1234
1241
|
}
|
|
1235
1242
|
else
|
|
1236
|
-
|
|
1237
|
-
switch (bmlen)
|
|
1238
|
-
{
|
|
1239
|
-
case 4:
|
|
1240
|
-
bookmark = *((unsigned int*)bmPtr);
|
|
1241
|
-
break;
|
|
1242
|
-
case 2:
|
|
1243
|
-
bookmark = *((unsigned short*)bmPtr);
|
|
1244
|
-
break;
|
|
1245
|
-
case 3:
|
|
1246
|
-
bookmark = *((unsigned int*)bmPtr) & 0x0FFFFFF;
|
|
1247
|
-
break;
|
|
1248
|
-
case 1:
|
|
1249
|
-
bookmark = *((unsigned short*)bmPtr) & 0x0FF;
|
|
1250
|
-
break;
|
|
1251
|
-
default:
|
|
1252
|
-
break;
|
|
1253
|
-
}
|
|
1254
|
-
return m_writer.write(&m_position, bookmark);
|
|
1255
|
-
}
|
|
1243
|
+
return m_writer.write(&m_position, bookmarkPtr, bmlen);
|
|
1256
1244
|
}
|
|
1257
1245
|
unsigned short rejectCount() const { return m_req->rejectCount; };
|
|
1258
1246
|
unsigned short maxRows() const { return m_maxRows; };
|