transactd 3.1.0 → 3.2.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.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/bin/common/tdclc_32_3_2.dll +0 -0
  3. data/bin/common/{tdclc_64_3_1.dll → tdclc_64_3_2.dll} +0 -0
  4. data/build/swig/ruby/ruby.swg +3 -0
  5. data/build/swig/ruby/tdclrb_wrap.cpp +2413 -126
  6. data/build/swig/tdcl.i +120 -9
  7. data/build/tdclc/tdclc.cbproj +4 -1
  8. data/build/tdclc/tdclc.rc +4 -4
  9. data/build/tdclcpp/tdclcpp.rc +4 -4
  10. data/build/tdclcpp/tdclcpp_bc.cbproj +8 -1
  11. data/build/tdclrb/tdclrb.rc +4 -4
  12. data/source/bzs/db/engine/mysql/database.cpp +138 -130
  13. data/source/bzs/db/engine/mysql/database.h +43 -48
  14. data/source/bzs/db/engine/mysql/dbManager.cpp +81 -96
  15. data/source/bzs/db/engine/mysql/dbManager.h +13 -22
  16. data/source/bzs/db/engine/mysql/mysqlInternal.h +157 -291
  17. data/source/bzs/db/engine/mysql/mysqlProtocol.cpp +425 -0
  18. data/source/bzs/db/engine/mysql/mysqlProtocol.h +72 -0
  19. data/source/bzs/db/engine/mysql/mysqlThd.cpp +8 -6
  20. data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +7 -3
  21. data/source/bzs/db/protocol/hs/hsCommandExecuter.h +1 -0
  22. data/source/bzs/db/protocol/tdap/client/client.h +22 -8
  23. data/source/bzs/db/protocol/tdap/client/connMgr.cpp +225 -21
  24. data/source/bzs/db/protocol/tdap/client/connMgr.h +42 -16
  25. data/source/bzs/db/protocol/tdap/client/database.cpp +58 -15
  26. data/source/bzs/db/protocol/tdap/client/database.h +3 -3
  27. data/source/bzs/db/protocol/tdap/client/dbDef.cpp +93 -85
  28. data/source/bzs/db/protocol/tdap/client/dbDef.h +1 -2
  29. data/source/bzs/db/protocol/tdap/client/dllmain.cpp +9 -5
  30. data/source/bzs/db/protocol/tdap/client/filter.h +2 -2
  31. data/source/bzs/db/protocol/tdap/client/groupComp.h +2 -2
  32. data/source/bzs/db/protocol/tdap/client/memRecord.cpp +1 -1
  33. data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +71 -12
  34. data/source/bzs/db/protocol/tdap/client/nsDatabase.h +7 -1
  35. data/source/bzs/db/protocol/tdap/client/nsTable.cpp +35 -2
  36. data/source/bzs/db/protocol/tdap/client/nsTable.h +1 -0
  37. data/source/bzs/db/protocol/tdap/client/recordset.cpp +5 -1
  38. data/source/bzs/db/protocol/tdap/client/recordset.h +15 -0
  39. data/source/bzs/db/protocol/tdap/client/recordsetImple.h +21 -16
  40. data/source/bzs/db/protocol/tdap/client/serializer.cpp +32 -11
  41. data/source/bzs/db/protocol/tdap/client/serializer.h +4 -1
  42. data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +3 -2
  43. data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +3 -0
  44. data/source/bzs/db/protocol/tdap/client/table.cpp +18 -14
  45. data/source/bzs/db/protocol/tdap/client/trdboostapi.h +8 -3
  46. data/source/bzs/db/protocol/tdap/mysql/characterset.cpp +1 -0
  47. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +83 -43
  48. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +3 -1
  49. data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +7 -7
  50. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +247 -137
  51. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +9 -9
  52. data/source/bzs/db/protocol/tdap/tdapSchema.cpp +1 -4
  53. data/source/bzs/db/protocol/tdap/tdapSchema.h +3 -7
  54. data/source/bzs/db/protocol/tdap/tdapcapi.h +23 -3
  55. data/source/bzs/db/protocol/tdap/uri.h +40 -0
  56. data/source/bzs/db/transactd/appModule.cpp +14 -5
  57. data/source/bzs/db/transactd/appModule.h +10 -1
  58. data/source/bzs/db/transactd/connManager.cpp +93 -48
  59. data/source/bzs/db/transactd/connManager.h +10 -7
  60. data/source/bzs/db/transactd/connectionRecord.h +114 -19
  61. data/source/bzs/env/tstring.h +2 -0
  62. data/source/bzs/example/changeSchema.cpp +1 -1
  63. data/source/bzs/example/changeSchema_c.cpp +1 -1
  64. data/source/bzs/example/insertRecords.cpp +2 -1
  65. data/source/bzs/example/insertRecords_c.cpp +2 -1
  66. data/source/bzs/example/queryData.cpp +5 -2
  67. data/source/bzs/netsvc/server/IAppModule.h +6 -0
  68. data/source/bzs/test/tdclatl/test_v3.js +75 -0
  69. data/source/bzs/test/tdclphp/transactd_v3_Test.php +104 -7
  70. data/source/bzs/test/tdclrb/transactd_v3_spec.rb +84 -0
  71. data/source/bzs/test/trdclengn/testField.h +66 -6
  72. data/source/bzs/test/trdclengn/test_tdclcpp_v3.cpp +10 -1
  73. data/source/bzs/test/trdclengn/test_trdclengn.cpp +85 -0
  74. data/source/bzs/test/trdclengn/testbase.h +1 -1
  75. data/source/global/tdclatl/BinlogPos.cpp +64 -0
  76. data/source/global/tdclatl/BinlogPos.h +84 -0
  77. data/source/global/tdclatl/ConnMgr.cpp +285 -0
  78. data/source/global/tdclatl/ConnMgr.h +83 -0
  79. data/source/global/tdclatl/ConnRecord.cpp +123 -0
  80. data/source/global/tdclatl/ConnRecord.h +69 -0
  81. data/source/global/tdclatl/ConnRecords.cpp +57 -0
  82. data/source/global/tdclatl/ConnRecords.h +55 -0
  83. data/source/global/tdclatl/Database.cpp +36 -0
  84. data/source/global/tdclatl/Database.h +4 -0
  85. data/source/global/tdclatl/Table.cpp +14 -1
  86. data/source/global/tdclatl/Table.h +1 -0
  87. data/source/global/tdclatl/resource.h +0 -0
  88. data/source/global/tdclatl/tdclatl.idl +148 -4
  89. metadata +14 -4
  90. data/bin/common/tdclc_32_3_1.dll +0 -0
@@ -105,10 +105,11 @@ struct dbdimple
105
105
  }
106
106
  };
107
107
 
108
- dbdef::dbdef(nsdatabase* pbe, short DefType) : nstable(pbe)
108
+ dbdef::dbdef(nsdatabase* pbe, short defType) : nstable(pbe)
109
109
  {
110
110
  m_dimpl = new dbdimple();
111
- m_dimpl->deftype = DefType;
111
+ m_dimpl->deftype = defType;
112
+ m_dimpl->noWriteMode = (m_dimpl->deftype == TYPE_SCHEMA_BDF_NOPRELOAD);
112
113
  m_keybuflen = 128;
113
114
  m_keybuf = &m_dimpl->keybuf[0];
114
115
  setShared();
@@ -120,11 +121,6 @@ dbdef::~dbdef()
120
121
  m_dimpl = NULL;
121
122
  }
122
123
 
123
- void dbdef::setDefType(short defType)
124
- {
125
- m_dimpl->deftype = defType;
126
- }
127
-
128
124
  short dbdef::tableCount() const
129
125
  {
130
126
  return m_dimpl->tableCount;
@@ -236,10 +232,10 @@ bool dbdef::testTablePtr(tabledef* td)
236
232
  return true;
237
233
  }
238
234
 
239
- short dbdef::validateTableDef(short TableIndex)
235
+ short dbdef::validateTableDef(short tableIndex)
240
236
  {
241
237
  m_stat = STATUS_SUCCESS;
242
- tabledef* td = tableDefs(TableIndex);
238
+ tabledef* td = tableDefs(tableIndex);
243
239
  if (!testTablePtr(td)) return m_stat;
244
240
 
245
241
  td->optionFlags.bitA = false; // reset valiable type
@@ -247,7 +243,7 @@ short dbdef::validateTableDef(short TableIndex)
247
243
  for (short i = 0; i < td->fieldCount; ++i)
248
244
  {
249
245
  const fielddef& fd = td->fieldDefs[i];
250
- short ret = fieldNumByName(TableIndex, fd.name());
246
+ short ret = fieldNumByName(tableIndex, fd.name());
251
247
  if ((ret != -1) && (ret != i))
252
248
  {
253
249
  m_stat = STATUS_DUPLICATE_FIELDNAME;
@@ -344,7 +340,7 @@ short dbdef::validateTableDef(short TableIndex)
344
340
  // Chack duplicate table name.
345
341
  for (short i = 1; i < m_dimpl->tableCount; i++)
346
342
  {
347
- if ((tableDefs(i)) && (i != TableIndex))
343
+ if ((tableDefs(i)) && (i != tableIndex))
348
344
  {
349
345
  m_stat = 0;
350
346
  if (strcmp(tableDefs(i)->tableNameA(), td->tableNameA()) == 0)
@@ -359,21 +355,22 @@ short dbdef::validateTableDef(short TableIndex)
359
355
  return m_stat;
360
356
  }
361
357
 
362
- void dbdef::updateTableDef(short TableIndex, bool forPsqlDdf)
358
+ void dbdef::updateTableDef(short tableIndex, bool forPsqlDdf)
363
359
  {
364
- if ((m_stat = validateTableDef(TableIndex)) != 0)
360
+ if ((m_stat = validateTableDef(tableIndex)) != 0)
365
361
  return;
366
362
 
367
- tabledef* td = tableDefs(TableIndex);
363
+ tabledef* td = tableDefs(tableIndex);
368
364
  if (!testTablePtr(td)) return;
369
365
 
370
366
  if (m_dimpl->noWriteMode)
371
367
  {
372
- m_stat = STATUS_ACCESS_DENIED;
368
+ if (m_dimpl->deftype != TYPE_SCHEMA_BDF_NOPRELOAD)
369
+ m_stat = STATUS_ACCESS_DENIED;
373
370
  return;
374
371
  }
375
372
  if (m_dimpl->deftype == TYPE_SCHEMA_DDF)
376
- saveDDF(TableIndex, 3, forPsqlDdf);
373
+ saveDDF(tableIndex, 3, forPsqlDdf);
377
374
  else
378
375
  {
379
376
  moveById(td->id);
@@ -389,21 +386,21 @@ void dbdef::updateTableDef(short TableIndex, bool forPsqlDdf)
389
386
  m_pdata = m_dimpl->bdf;
390
387
  m_buflen = m_dimpl->bdfLen;
391
388
  if (m_stat == STATUS_SUCCESS)
392
- setDefaultImage(TableIndex, NULL, 0);
389
+ setDefaultImage(tableIndex, NULL, 0);
393
390
  }
394
391
  }
395
392
  }
396
393
 
397
- void dbdef::deleteTable(short TableIndex)
394
+ void dbdef::deleteTable(short tableIndex)
398
395
  {
399
- tabledef* td = tableDefs(TableIndex);
396
+ tabledef* td = tableDefs(tableIndex);
400
397
  if (!testTablePtr(td)) return;
401
398
 
402
399
  m_stat = STATUS_SUCCESS;
403
400
  if (m_dimpl->noWriteMode == false)
404
401
  {
405
402
  if (m_dimpl->deftype == TYPE_SCHEMA_DDF)
406
- saveDDF(TableIndex, 4);
403
+ saveDDF(tableIndex, 4);
407
404
  else
408
405
  {
409
406
  moveById(td->id);
@@ -419,18 +416,18 @@ void dbdef::deleteTable(short TableIndex)
419
416
  }
420
417
  if (m_stat == STATUS_SUCCESS)
421
418
  {
422
- setDefaultImage(TableIndex, NULL, 0);
419
+ setDefaultImage(tableIndex, NULL, 0);
423
420
  free(td);
424
- m_dimpl->tableDefs[TableIndex] = NULL;
421
+ m_dimpl->tableDefs[tableIndex] = NULL;
425
422
  }
426
423
  }
427
424
 
428
- void dbdef::renumberFieldNum(short TableIndex, short Index, short op)
425
+ void dbdef::renumberFieldNum(short tableIndex, short Index, short op)
429
426
  {
430
427
  int i, j;
431
428
  keydef* KeyDef;
432
429
 
433
- tabledef* td = tableDefs(TableIndex);
430
+ tabledef* td = tableDefs(tableIndex);
434
431
  if (!testTablePtr(td)) return;
435
432
 
436
433
  for (i = 0; i < td->keyCount; i++)
@@ -454,11 +451,11 @@ void dbdef::renumberFieldNum(short TableIndex, short Index, short op)
454
451
  }
455
452
  }
456
453
 
457
- bool dbdef::isUsedField(short TableIndex, short DeleteIndex)
454
+ bool dbdef::isUsedField(short tableIndex, short deleteIndex)
458
455
  {
459
456
  int i, j;
460
457
  keydef* KeyDef;
461
- tabledef* td = tableDefs(TableIndex);
458
+ tabledef* td = tableDefs(tableIndex);
462
459
  if (!testTablePtr(td)) return false;
463
460
 
464
461
  for (i = 0; i < td->keyCount; i++)
@@ -466,60 +463,60 @@ bool dbdef::isUsedField(short TableIndex, short DeleteIndex)
466
463
  KeyDef = &(td->keyDefs[i]);
467
464
  for (j = 0; j < KeyDef->segmentCount; j++)
468
465
  {
469
- if (KeyDef->segments[j].fieldNum == DeleteIndex)
466
+ if (KeyDef->segments[j].fieldNum == deleteIndex)
470
467
  return true;
471
468
  }
472
469
  }
473
470
  return false;
474
471
  }
475
472
 
476
- void dbdef::deleteField(short TableIndex, short DeleteIndex)
473
+ void dbdef::deleteField(short tableIndex, short deleteIndex)
477
474
  {
478
475
  m_stat = STATUS_SUCCESS;
479
- if (isUsedField(TableIndex, DeleteIndex) == true)
476
+ if (isUsedField(tableIndex, deleteIndex) == true)
480
477
  {
481
478
  m_stat = STATUS_USE_KEYFIELD;
482
479
  return;
483
480
  }
484
- renumberFieldNum(TableIndex, DeleteIndex, 4);
485
- tabledef* td = tableDefs(TableIndex);
486
- if ((DeleteIndex == td->fieldCount - 1) && (td->keyCount == 0))
481
+ renumberFieldNum(tableIndex, deleteIndex, 4);
482
+ tabledef* td = tableDefs(tableIndex);
483
+ if ((deleteIndex == td->fieldCount - 1) && (td->keyCount == 0))
487
484
  {
488
485
  }
489
486
  else
490
487
  {
491
- memmove(&td->fieldDefs[DeleteIndex], &td->fieldDefs[DeleteIndex + 1],
488
+ memmove(&td->fieldDefs[deleteIndex], &td->fieldDefs[deleteIndex + 1],
492
489
  td->size() + (char*)td -
493
- (char*)&(td->fieldDefs[DeleteIndex + 1]));
490
+ (char*)&(td->fieldDefs[deleteIndex + 1]));
494
491
  }
495
492
  td->fieldCount--;
496
493
  td->setKeydefsPtr();
497
- updateTableDef(TableIndex);
494
+ updateTableDef(tableIndex);
498
495
  }
499
496
 
500
- void dbdef::deleteKey(short TableIndex, short DeleteIndex)
497
+ void dbdef::deleteKey(short tableIndex, short deleteIndex)
501
498
  {
502
499
  m_stat = STATUS_SUCCESS;
503
- tabledef* td = tableDefs(TableIndex);
500
+ tabledef* td = tableDefs(tableIndex);
504
501
  if (!testTablePtr(td)) return ;
505
- if (DeleteIndex != td->keyCount - 1)
502
+ if (deleteIndex != td->keyCount - 1)
506
503
  {
507
- memmove(&td->keyDefs[DeleteIndex], &td->keyDefs[DeleteIndex + 1],
504
+ memmove(&td->keyDefs[deleteIndex], &td->keyDefs[deleteIndex + 1],
508
505
  td->size() + (char*)td -
509
- (char*)&(td->keyDefs[DeleteIndex + 1]));
506
+ (char*)&(td->keyDefs[deleteIndex + 1]));
510
507
  }
511
508
  td->keyCount--;
512
- if ((td->primaryKeyNum == DeleteIndex) ||
509
+ if ((td->primaryKeyNum == deleteIndex) ||
513
510
  (td->primaryKeyNum > td->keyCount - 1))
514
511
  td->primaryKeyNum = -1;
515
- if ((td->parentKeyNum == DeleteIndex) ||
512
+ if ((td->parentKeyNum == deleteIndex) ||
516
513
  (td->parentKeyNum > td->keyCount - 1))
517
514
  td->parentKeyNum = -1;
518
- if ((td->replicaKeyNum == DeleteIndex) ||
515
+ if ((td->replicaKeyNum == deleteIndex) ||
519
516
  (td->replicaKeyNum > td->keyCount - 1))
520
517
  td->replicaKeyNum = -1;
521
518
 
522
- updateTableDef(TableIndex);
519
+ updateTableDef(tableIndex);
523
520
  }
524
521
 
525
522
  void dbdef::insertTable(tabledef* td)
@@ -557,6 +554,7 @@ void dbdef::insertTable(tabledef* td)
557
554
  if ((td->ddfid == 0) && (m_dimpl->deftype == TYPE_SCHEMA_DDF))
558
555
  td->ddfid = getDDFNewTableIndex();
559
556
  memcpy(m_dimpl->tableDefs[td->id], td, sizeof(tabledef));
557
+ m_dimpl->tableDefs[td->id]->defaultImage = NULL;
560
558
  if (m_dimpl->noWriteMode)
561
559
  {
562
560
  if (m_dimpl->tableCount < td->id)
@@ -589,10 +587,12 @@ void dbdef::insertTable(tabledef* td)
589
587
  }
590
588
  }
591
589
 
592
- bool dbdef::resizeAt(short TableIndex, bool key)
590
+ bool dbdef::resizeAt(short tableIndex, bool key)
593
591
  {
594
- tabledef* def = m_dimpl->tableDefs[TableIndex];
595
- if (!key && def->m_inUse != 0) return false;
592
+ tabledef* td = m_dimpl->tableDefs[tableIndex];
593
+ if (!testTablePtr(td)) return false;
594
+
595
+ if (!key && td->m_inUse != 0) return false;
596
596
 
597
597
  uint_td addsize;
598
598
 
@@ -601,64 +601,64 @@ bool dbdef::resizeAt(short TableIndex, bool key)
601
601
  else
602
602
  addsize = sizeof(fielddef);
603
603
 
604
- uint_td size = def->size() + addsize;
605
-
604
+ uint_td size = td->size() + addsize;
605
+
606
606
  void* p = malloc(size);
607
607
  if (p)
608
608
  {
609
- memcpy(p, def, def->size());
610
- free(def);
611
- m_dimpl->tableDefs[TableIndex] = def = (tabledef*)p;
609
+ memcpy(p, td, td->size());
610
+ free(td);
611
+ m_dimpl->tableDefs[tableIndex] = td = (tabledef*)p;
612
612
  // init for memcpy
613
- def->setFielddefsPtr();
614
- def->setKeydefsPtr();
613
+ td->setFielddefsPtr();
614
+ td->setKeydefsPtr();
615
615
  return true;
616
616
  }
617
617
  m_stat = STATUS_CANT_ALLOC_MEMORY;
618
618
  return false;
619
619
  }
620
620
 
621
- keydef* dbdef::insertKey(short TableIndex, short InsertIndex)
621
+ keydef* dbdef::insertKey(short tableIndex, short insertIndex)
622
622
  {
623
- if (resizeAt(TableIndex, true) == false)
623
+ if (resizeAt(tableIndex, true) == false)
624
624
  return NULL;
625
625
 
626
- tabledef* td = m_dimpl->tableDefs[TableIndex];
627
- if (InsertIndex < tableDefs(TableIndex)->keyCount)
626
+ tabledef* td = m_dimpl->tableDefs[tableIndex];
627
+ if (insertIndex < tableDefs(tableIndex)->keyCount)
628
628
  {
629
- memmove(&td->keyDefs[InsertIndex + 1],
630
- &td->keyDefs[InsertIndex],
631
- td->size() + (char*)td - (char*)&(td->keyDefs[InsertIndex]));
629
+ memmove(&td->keyDefs[insertIndex + 1],
630
+ &td->keyDefs[insertIndex],
631
+ td->size() + (char*)td - (char*)&(td->keyDefs[insertIndex]));
632
632
  }
633
633
  td->keyCount++;
634
- memset(&(td->keyDefs[InsertIndex]), 0, sizeof(keydef));
634
+ memset(&(td->keyDefs[insertIndex]), 0, sizeof(keydef));
635
635
 
636
636
  if ((!m_dimpl->noWriteMode) && (m_dimpl->deftype != TYPE_SCHEMA_DDF))
637
- updateTableDef(TableIndex);
637
+ updateTableDef(tableIndex);
638
638
  else
639
639
  td->calcReclordlen();
640
- return &(td->keyDefs[InsertIndex]);
640
+ return &(td->keyDefs[insertIndex]);
641
641
  }
642
642
 
643
- fielddef* dbdef::insertField(short TableIndex, short InsertIndex)
643
+ fielddef* dbdef::insertField(short tableIndex, short insertIndex)
644
644
  {
645
- if (resizeAt(TableIndex, false) == false)
645
+ if (resizeAt(tableIndex, false) == false)
646
646
  return NULL;
647
647
 
648
- tabledef* td = tableDefs(TableIndex);
649
- if ((InsertIndex < td->fieldCount) || (td->keyCount > 0))
648
+ tabledef* td = tableDefs(tableIndex);
649
+ if ((insertIndex < td->fieldCount) || (td->keyCount > 0))
650
650
  {
651
651
 
652
- memmove(&(td->fieldDefs[InsertIndex + 1]),
653
- &(td->fieldDefs[InsertIndex]),
652
+ memmove(&(td->fieldDefs[insertIndex + 1]),
653
+ &(td->fieldDefs[insertIndex]),
654
654
  td->size() + (char*)td -
655
- (char*)&(td->fieldDefs[InsertIndex]));
655
+ (char*)&(td->fieldDefs[insertIndex]));
656
656
  }
657
657
  td->fieldCount++;
658
658
  td->setKeydefsPtr();
659
- renumberFieldNum(TableIndex, InsertIndex, 2);
660
- memset(&(td->fieldDefs[InsertIndex]), 0, sizeof(fielddef));
661
- fielddef* fd = &(td->fieldDefs[InsertIndex]);
659
+ renumberFieldNum(tableIndex, insertIndex, 2);
660
+ memset(&(td->fieldDefs[insertIndex]), 0, sizeof(fielddef));
661
+ fielddef* fd = &(td->fieldDefs[insertIndex]);
662
662
  fd->setCharsetIndex(td->charsetIndex);
663
663
  fd->setSchemaCodePage(td->schemaCodePage);
664
664
  fd->setPadCharSettings(false, true);
@@ -809,6 +809,7 @@ tabledef* dbdef::tableDefs(int index)
809
809
 
810
810
  void dbdef::doOpen(const _TCHAR* uri, char_td mode, const _TCHAR* onerName)
811
811
  {
812
+ assert((m_dimpl->deftype != TYPE_SCHEMA_BDF_NOPRELOAD));
812
813
  m_dimpl->noWriteMode = true;
813
814
 
814
815
  if (m_dimpl->deftype == TYPE_SCHEMA_DDF)
@@ -988,9 +989,9 @@ void dbdef::renumberTable(short OldIndex, short NewIndex)
988
989
  }
989
990
  }
990
991
 
991
- short dbdef::fieldNumByViewNum(short TableIndex, short index)
992
+ short dbdef::fieldNumByViewNum(short tableIndex, short index)
992
993
  {
993
- tabledef* td = tableDefs(TableIndex);
994
+ tabledef* td = tableDefs(tableIndex);
994
995
  if (td)
995
996
  {
996
997
  for (short i = 0; i < td->fieldCount; i++)
@@ -1003,9 +1004,9 @@ short dbdef::fieldNumByViewNum(short TableIndex, short index)
1003
1004
  return -1;
1004
1005
  }
1005
1006
 
1006
- short dbdef::findKeynumByFieldNum(short TableIndex, short index)
1007
+ short dbdef::findKeynumByFieldNum(short tableIndex, short index)
1007
1008
  {
1008
- tabledef* td = tableDefs(TableIndex);
1009
+ tabledef* td = tableDefs(tableIndex);
1009
1010
  if (td)
1010
1011
  return td->findKeynumByFieldNum(index);
1011
1012
  return -1;
@@ -1027,9 +1028,9 @@ short dbdef::tableNumByName(const _TCHAR* tableName)
1027
1028
  return -1;
1028
1029
  }
1029
1030
 
1030
- short dbdef::fieldNumByName(short TableIndex, const _TCHAR* name)
1031
+ short dbdef::fieldNumByName(short tableIndex, const _TCHAR* name)
1031
1032
  {
1032
- tabledef* td = tableDefs(TableIndex);
1033
+ tabledef* td = tableDefs(tableIndex);
1033
1034
  if (td)
1034
1035
  return td->fieldNumByName(name);
1035
1036
  return -1;
@@ -1316,11 +1317,11 @@ void dbdef::createDDF(const _TCHAR* fullpath)
1316
1317
  id->release();
1317
1318
  }
1318
1319
 
1319
- void dbdef::saveDDF(short TableIndex, short opration, bool forPsqlDdf)
1320
+ void dbdef::saveDDF(short tableIndex, short opration, bool forPsqlDdf)
1320
1321
  {
1321
1322
  ushort_td chOpen = 0;
1322
1323
  short Mode = 0;
1323
- ushort_td tbid = TableIndex;
1324
+ ushort_td tbid = tableIndex;
1324
1325
  ushort_td fdid;
1325
1326
  ushort_td keyid;
1326
1327
  ushort_td segid;
@@ -1789,11 +1790,18 @@ void dbdef::reopen(char_td mode)
1789
1790
 
1790
1791
  void dbdef::synchronizeSeverSchema(short tableIndex)
1791
1792
  {
1792
- if (!isUseTransactd()) return;
1793
+ if (isUseTransactd() == false)
1794
+ {
1795
+ m_stat = STATUS_NOSUPPORT_OP;
1796
+ return ;
1797
+ }
1793
1798
 
1794
1799
  tabledef* tdold = tableDefs(tableIndex);
1795
- if (!tdold) return;
1796
-
1800
+ if (!tdold)
1801
+ {
1802
+ m_stat = STATUS_INVALID_TABLE_IDX;
1803
+ return;
1804
+ }
1797
1805
  void* tmp = m_keybuf;
1798
1806
 
1799
1807
  _TCHAR dummyUrl[MAX_PATH] = _T("tdap://srv/db?dbfile=");
@@ -77,7 +77,6 @@ class DLLLIB dbdef : private nstable
77
77
  dbdef(nsdatabase* pbe, short defType);
78
78
  void create(const _TCHAR* uri);
79
79
  void autoMakeSchema(bool noUseNullkey);
80
- void setDefType(short defType);
81
80
  bool testTablePtr(tabledef* td);
82
81
  tabledef* initReadAfter(short tableIndex, const tabledef* data, uint_td datalen);
83
82
  void* getBufferPtr(uint_td& size);
@@ -97,7 +96,7 @@ public:
97
96
  int version() const;
98
97
 
99
98
  inline short_td stat() const { return m_stat; }
100
- short validateTableDef(short TableIndex);
99
+ short validateTableDef(short tableIndex);
101
100
  void updateTableDef(short tableIndex, bool forPsqlDdf = true);
102
101
  fielddef* insertField(short tableIndex, short insertIndex);
103
102
  void deleteField(short tableIndex, short deleteIndex);
@@ -368,8 +368,9 @@ extern "C" PACKAGE_OSX short_td __STDCALL
368
368
  client_t->reconnect();
369
369
  else
370
370
  client_t->cmdConnect();
371
- if (client_t->req().keyNum == LG_SUBOP_DISCONNECT_EX)
372
- return 0;
371
+ if ((client_t->req().keyNum == LG_SUBOP_ASSOCIATE) ||
372
+ (client_t->req().keyNum == LG_SUBOP_DISCONNECT_EX))
373
+ return STATUS_SUCCESS;
373
374
  break;
374
375
  }
375
376
  case TD_RECONNECT:
@@ -378,8 +379,7 @@ extern "C" PACKAGE_OSX short_td __STDCALL
378
379
  break;
379
380
  }
380
381
  case TD_STASTISTICS:
381
- client_t->req().paramMask =
382
- P_MASK_DATALEN | P_MASK_KEYBUF | P_MASK_KEYNUM;
382
+ client_t->req().paramMask = P_MASK_DATALEN | P_MASK_KEYBUF | P_MASK_KEYNUM;
383
383
  break;
384
384
  case TD_RESET_CLIENT:
385
385
  case TD_GETDIRECTORY:
@@ -396,7 +396,11 @@ extern "C" PACKAGE_OSX short_td __STDCALL
396
396
  break;
397
397
  case TD_GET_SCHEMA:
398
398
  if (client_t->isSupportFunction(TD_GET_SCHEMA))
399
- client_t->req().paramMask = P_MASK_DATALEN | P_MASK_KEYBUF;
399
+ {
400
+ client_t->req().paramMask = P_MASK_DATALEN | P_MASK_KEYNUM | P_MASK_KEYBUF;
401
+ if (keyNum == SC_SUBOP_BY_SQL)
402
+ client_t->req().paramMask |= P_MASK_POSBLK;
403
+ }
400
404
  else
401
405
  return STATUS_NOSUPPORT_OP;
402
406
  break;
@@ -765,7 +765,7 @@ class filter
765
765
  const keyValuePtr& v = keyValues[i + j];
766
766
  fielddef& fd = fds[kd->segments[j].fieldNum];
767
767
  has_null |= (v.ptr == NULL);
768
- to = fd.keyCopy(to, (uchar_td*)v.ptr, v.len, (v.ptr == NULL));
768
+ to = fd.keyCopy(to, (uchar_td*)v.ptr, v.len, (v.ptr == NULL), m_isTransactd);
769
769
  }
770
770
  }
771
771
  if (!l.setParam(dataBuf, (ushort_td)(to - dataBuf), has_null))
@@ -1156,7 +1156,7 @@ public:
1156
1156
  for (int j = 0; j < keySize; ++j)
1157
1157
  {
1158
1158
  fielddef& fd = fds[kd->segments[j].fieldNum];
1159
- to = fd.keyCopy(to, (uchar_td*)ptr[j], len[j], (ptr[j]==NULL));
1159
+ to = fd.keyCopy(to, (uchar_td*)ptr[j], len[j], (ptr[j]==NULL), m_isTransactd);
1160
1160
  has_null |= (ptr[j] == NULL);
1161
1161
  }
1162
1162
  if (!l.setParam(m_buftmp, (ushort_td)(to - m_buftmp), has_null))
@@ -1,7 +1,7 @@
1
1
  #ifndef BZS_DB_PROTOCOL_TDAP_CLIENT_GROUPCOMP_H
2
2
  #define BZS_DB_PROTOCOL_TDAP_CLIENT_GROUPCOMP_H
3
3
  /*=================================================================
4
- Copyright (C) 2014 BizStation Corp All rights reserved.
4
+ Copyright (C) 2014-2016 BizStation Corp All rights reserved.
5
5
 
6
6
  This program is free software; you can redistribute it and/or
7
7
  modify it under the terms of the GNU General Public License
@@ -62,7 +62,7 @@ int binary_search(int key, const Container& a, int left, int right, FUNC func,
62
62
  inline int compByKey(const fieldsBase& l, const fieldsBase& r, const int& s)
63
63
  {
64
64
  assert((s < (int)l.size()) && (s < (int)r.size()));
65
- return l.getFieldNoCheck(s).comp(r.getFieldNoCheck(s), 0);
65
+ return l.getFieldNoCheck(s).comp(r.getFieldNoCheck(s), CMPLOGICAL_VAR_COMP_ALL);
66
66
  }
67
67
 
68
68
  template <class Container> class grouping_comp
@@ -58,7 +58,7 @@ void autoMemory::setParams(unsigned char* p, size_t s, short* endIndex, bool own
58
58
  if (p)
59
59
  memcpy(ptr, p, size);
60
60
  else
61
- memset(ptr, 0, size);
61
+ memset(ptr, 0, size + 1);
62
62
  endFieldIndex = new short;
63
63
  if (endIndex != NULL)
64
64
  *endFieldIndex = *endIndex;