transactd 3.5.0-x86-mswin32-100 → 3.6.0-x86-mswin32-100

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.
@@ -23,7 +23,7 @@ require 'transactd'
23
23
  require 'rbconfig'
24
24
  IS_WINDOWS = (RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/)
25
25
 
26
- Transactd::setRecordValueMode(Transactd::RECORD_KEYVALUE_FIELDVALUE)
26
+ Transactd::setFieldValueMode(Transactd::FIELD_VALUE_MODE_VALUE)
27
27
 
28
28
  def getEnv(valuename)
29
29
  return ENV[valuename] if ENV[valuename] != nil
@@ -84,18 +84,27 @@ def testCreateDatabase(db)
84
84
  expect(db.stat()).to eq 0
85
85
  end
86
86
 
87
+ def getMode(mode)
88
+ mode += 128 if mode <= -128
89
+ mode += 64 if mode <= -64
90
+ mode += 32 if mode <= -32
91
+ mode += 16 if mode <= -16
92
+ return mode
93
+ end
94
+
87
95
  def testOpenDatabase(db)
88
96
  db.open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
89
97
  expect(db.stat()).to eq 0
98
+ expect(getMode(db.mode)).to eq Transactd::TD_OPEN_NORMAL
90
99
  # test statMsg
91
100
  msg = db.statMsg()
92
101
  expect(msg).to eq ''
93
-
94
102
  end
95
103
 
96
104
  def testCreateTable(db)
97
105
  testOpenDatabase(db)
98
106
  dbdef = db.dbDef()
107
+ expect(getMode(dbdef.mode)).to eq Transactd::TD_OPEN_NORMAL
99
108
  expect(dbdef).not_to be nil
100
109
  td = Transactd::Tabledef.new()
101
110
  td.setTableName(TABLENAME)
@@ -192,6 +201,7 @@ def testOpenTable(db)
192
201
  testOpenDatabase(db)
193
202
  tb = db.openTable(TABLENAME)
194
203
  expect(db.stat()).to eq 0
204
+ expect(getMode(tb.mode)).to eq Transactd::TD_OPEN_NORMAL
195
205
  return tb
196
206
  end
197
207
 
@@ -1505,6 +1515,7 @@ def testExclusive()
1505
1515
  # ------------------------------------------------------
1506
1516
  db.open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_EXCLUSIVE)
1507
1517
  expect(db.stat()).to eq 0
1518
+ expect(getMode(db.mode)).to eq Transactd::TD_OPEN_EXCLUSIVE
1508
1519
  tb = db.openTable(TABLENAME)
1509
1520
  expect(db.stat()).to eq 0
1510
1521
 
@@ -1516,6 +1527,7 @@ def testExclusive()
1516
1527
  # database open error. Check database::stat()
1517
1528
  expect(db2.stat()).to eq Transactd::STATUS_CANNOT_LOCK_TABLE
1518
1529
  dd = db.dbDef()
1530
+ expect(getMode(dd.mode)).to eq Transactd::TD_OPEN_EXCLUSIVE
1519
1531
  td = dd.tableDefs(1)
1520
1532
  dd.updateTableDef(1)
1521
1533
  expect(dd.stat()).to eq 0
@@ -203,9 +203,10 @@ def createUserTable(db)
203
203
  fieldIndex += 1
204
204
  fd = dbdef.insertField(tableid, fieldIndex)
205
205
  fd.setName('tel')
206
- fd.type = Transactd::Ft_myvarchar
207
- fd.len = 4
208
- fd.setLenByCharnum(21)
206
+ #fd.type = Transactd::Ft_myvarchar
207
+ #fd.setLenByCharnum(21)
208
+ fd.type = Transactd::Ft_myvarbinary
209
+ fd.len = 64
209
210
  fd.setNullable(true)
210
211
  fieldIndex += 1
211
212
  fd = dbdef.insertField(tableid, fieldIndex)
@@ -337,7 +338,145 @@ def createSetEnumBitTable(db)
337
338
  expect(db.stat()).to eq 0
338
339
  end
339
340
 
341
+ class RecordDateTime
342
+ attr_accessor :update_datetime, :create_datetime
343
+ def initialize
344
+ @update_datetime = nil
345
+ @create_datetime = nil
346
+ end
347
+ def empty?
348
+ @update_datetime.nil? && @create_datetime.nil?
349
+ end
350
+ end
351
+
352
+ class RecordDateTimeWithAlias
353
+ attr_accessor :update, :create
354
+ def initialize
355
+ @update = nil
356
+ @create = nil
357
+ end
358
+ def empty?
359
+ @update.nil? && @create.nil?
360
+ end
361
+ end
362
+
363
+ class DateTimeNest
364
+ attr_accessor :datetime, :aliased_datetime
365
+ def initialize
366
+ @datetime = RecordDateTime.new
367
+ @aliased_datetime = RecordDateTimeWithAlias.new
368
+ end
369
+ end
370
+
371
+ class NameHolder
372
+ attr_accessor :name, :"名前", :"名前2"
373
+ def initialize
374
+ @name = nil
375
+ @名前 = nil
376
+ @名前2 = nil
377
+ end
378
+ end
379
+
380
+ class NestName
381
+ attr_accessor :name_holder
382
+ def initialize
383
+ @name_holder = NameHolder.new
384
+ end
385
+ end
386
+
387
+ class User
388
+ attr_accessor :a, :b, :c, :datetime, :aliased_datetime, :nest, :nest_name
389
+ def initialize(_a, _b, _c)
390
+ @a = _a
391
+ @b = _b
392
+ @c = _c
393
+ @datetime = RecordDateTime.new
394
+ @aliased_datetime = RecordDateTimeWithAlias.new
395
+ @nest = DateTimeNest.new
396
+ @nest_name = NestName.new
397
+ end
398
+
399
+ @_nodefine_original = false
400
+ def self.define_original_name
401
+ @_nodefine_original = false
402
+ end
403
+ def self.remove_original_name
404
+ @_nodefine_original = true
405
+ end
406
+
407
+ @_alias_map = {}
408
+ def self.alias_attribute(newname, oldname)
409
+ @_alias_map = {} if @_alias_map.nil?
410
+ @_alias_map[newname.to_sym] = oldname.to_s
411
+ end
412
+
413
+ @_transfer_map = {}
414
+ def self.transfer_map=(v)
415
+ @_transfer_map = v
416
+ end
417
+
418
+ def self.reset_class
419
+ remove_instance_variable(:@_alias_map) if self.instance_variables.include?(:@_alias_map)
420
+ remove_instance_variable(:@_accessor_initialized) if self.instance_variables.include?(:@_accessor_initialized)
421
+ remove_instance_variable(:@_transfer_map) if self.instance_variables.include?(:@_transfer_map)
422
+ remove_instance_variable(:@_internal_transfer_map) if self.instance_variables.include?(:@_internal_transfer_map)
423
+ ["id", "name", "名前", "名前2", "group", "tel", "update_datetime", "create_datetime"].each { |n|
424
+ remove_method(n.to_sym) if self.instance_methods(false).include?(n.to_sym)
425
+ remove_method("#{n}=".to_sym) if self.instance_methods(false).include?("#{n}=".to_sym)
426
+ }
427
+ end
428
+ end
429
+
430
+ class Number
431
+ attr_accessor :tel
432
+ end
433
+
434
+ class Phone
435
+ attr_accessor :number, :number2
436
+ def initialize
437
+ @number = Number.new
438
+ @number2 = nil
439
+ end
440
+ end
441
+
442
+ class UserT
443
+ attr_accessor :phone, :phone2, :id
444
+ def initialize
445
+ @id = 0
446
+ @phone = Phone.new
447
+ @phone2 = nil
448
+ end
449
+
450
+ @_transfer_map = { tel: [:phone, :number] }
451
+ def self.setTransferMap(type)
452
+ remove_instance_variable(:@_transfer_map) if self.instance_variables.include?(:@_transfer_map)
453
+ remove_instance_variable(:@_internal_transfer_map) if self.instance_variables.include?(:@_internal_transfer_map)
454
+ if (type == 0)
455
+ @_transfer_map = { tel: [:phone, :number] }
456
+ elsif (type == 1)
457
+ @_transfer_map = { tel: [:phone2, :number] }
458
+ elsif (type == 2)
459
+ @_transfer_map = { tel: [:phone, :number2] }
460
+ end
461
+ end
462
+ end
463
+
340
464
  describe Transactd, 'V3Features' do
465
+ it 'test no schema' do
466
+ db = Transactd::Database.new()
467
+ db.open(URL_AUTOSCHEMA)
468
+ if (db.stat == 0)
469
+ db.drop()
470
+ expect(db.stat()).to eq 0
471
+ end
472
+ db.create(URL_AUTOSCHEMA)
473
+ expect(db.stat()).to eq 0
474
+ db.open(URL_AUTOSCHEMA)
475
+ expect(db.stat()).to eq 0
476
+ db.drop()
477
+ expect(db.stat()).to eq 0
478
+ end
479
+
341
480
  it 'create tables' do
342
481
  db = Transactd::Database.new()
343
482
  createDatabase(db)
@@ -361,16 +500,23 @@ describe Transactd, 'V3Features' do
361
500
  expect(db.autoSchemaUseNullkey()).to eq true
362
501
  db.setAutoSchemaUseNullkey(false)
363
502
  expect(db.autoSchemaUseNullkey()).to eq false
364
- expect(Transactd::Database::compatibleMode()).to eq Transactd::Database::CMP_MODE_MYSQL_NULL
365
- Transactd::Database::setCompatibleMode(Transactd::Database::CMP_MODE_OLD_NULL)
366
- expect(Transactd::Database::compatibleMode()).to eq Transactd::Database::CMP_MODE_OLD_NULL
503
+ # default
504
+ expect(Transactd::Database::compatibleMode).to eq Transactd::Database::CMP_MODE_MYSQL_NULL
505
+ # CMP_MODE_OLD_NULL
506
+ Transactd::Database::set_compatible_mode(Transactd::Database::CMP_MODE_OLD_NULL)
507
+ expect(Transactd::Database::compatibleMode).to eq Transactd::Database::CMP_MODE_OLD_NULL
508
+ # CMP_MODE_BINFD_DEFAULT_STR
509
+ Transactd::Database::compatible_mode = Transactd::Database::CMP_MODE_BINFD_DEFAULT_STR
510
+ expect(Transactd::Database::compatibleMode).to eq Transactd::Database::CMP_MODE_BINFD_DEFAULT_STR
511
+ # CMP_MODE_MYSQL_NULL
367
512
  Transactd::Database::setCompatibleMode(Transactd::Database::CMP_MODE_MYSQL_NULL)
368
- expect(Transactd::Database::compatibleMode()).to eq Transactd::Database::CMP_MODE_MYSQL_NULL
513
+ expect(Transactd::Database::compatible_mode).to eq Transactd::Database::CMP_MODE_MYSQL_NULL
369
514
  db.close()
370
515
  end
371
516
 
372
517
  it 'check' do
373
518
  Transactd::Database::setCompatibleMode(Transactd::Database::CMP_MODE_MYSQL_NULL)
519
+ expect(Transactd::Database::compatible_mode).to eq Transactd::Database::CMP_MODE_MYSQL_NULL
374
520
  db = Transactd::Database.new()
375
521
  openDatabase(db)
376
522
  openTableOnce(db)
@@ -439,7 +585,7 @@ describe Transactd, 'V3Features' do
439
585
  # getSqlStringForCreateTable
440
586
  sql = db.getSqlStringForCreateTable("extention")
441
587
  expect(db.stat()).to eq 0
442
- expect(sql).to eq 'CREATE TABLE `extention` (`id` INT NOT NULL ,`comment` VARCHAR(60) binary NULL DEFAULT NULL,`bits` BIGINT NOT NULL , UNIQUE key0(`id`)) ENGINE=InnoDB default charset=utf8'
588
+ expect(sql).to eq 'CREATE TABLE `extention` (`id` INT NOT NULL ,`comment` VARCHAR(60) binary NULL DEFAULT NULL,`bits` BIGINT NOT NULL , PRIMARY KEY(`id`)) ENGINE=InnoDB default charset=utf8'
443
589
  # setValidationTarget(bool isMariadb, uchar_td srvMinorVersion)
444
590
  td = dbdef.tableDefs(1)
445
591
  td.setValidationTarget(true, 0)
@@ -570,11 +716,11 @@ describe Transactd, 'V3Features' do
570
716
  rs2 = rs2.matchBy(rq)
571
717
  expect(rs2.count()).to eq 10
572
718
  # setBin bin
573
- hex_str = ['FF01FF02']
719
+ hex_str = ['FF00FF02']
574
720
  bin = hex_str.pack('H*')
575
721
  wr["tel"].setBin(bin)
576
722
  ret = wr["tel"].bin()
577
- expect(ret.unpack('H*')[0].upcase()).to eq hex_str[0]
723
+ expect(bin).to eq ret
578
724
  atu.release()
579
725
  ate.release()
580
726
  db.close()
@@ -810,7 +956,9 @@ describe Transactd, 'V3Features' do
810
956
  # other database connection
811
957
  db_other = Transactd::Database.new()
812
958
  openDatabase(db_other)
813
- tb_other = db_other.openTable("user")
959
+ tb_other = db_other.openTable("user", Transactd::TD_OPEN_READONLY)
960
+ expect(db_other.stat()).to eq 0
961
+ db_other.beginTrn
814
962
  expect(db_other.stat()).to eq 0
815
963
  # connMgr connection
816
964
  db = Transactd::Database.new()
@@ -825,10 +973,27 @@ describe Transactd, 'V3Features' do
825
973
  recs = mgr.inUseDatabases(recs[0].conId)
826
974
  expect(mgr.stat()).to eq 0
827
975
  expect(recs.size()).to eq 1
976
+ # connRecord::inTransaction, connRecord::inSnapshot
977
+ rec = recs[0]
978
+ expect(rec.name).to eq DBNAME
979
+ expect(rec.inTransaction).to be true
980
+ expect(rec.inSnapshot).to be false
828
981
  # inUseTables
829
982
  recs = mgr.inUseTables(recs[0].conId, recs[0].db)
830
983
  expect(mgr.stat()).to eq 0
831
984
  expect(recs.size()).to eq 2
985
+ # connRecord::openNormal, connRecord::openReadOnly
986
+ # connRecord::openEx, connRecord::openReadOnlyEx
987
+ expect(recs[0].name).to eq "test" # schema table
988
+ expect(recs[0].openNormal).to be true
989
+ expect(recs[0].openReadOnly).to be false
990
+ expect(recs[0].openEx).to be false
991
+ expect(recs[0].openReadOnlyEx).to be false
992
+ expect(recs[1].name).to eq "user" # opened as tb_other
993
+ expect(recs[1].openNormal).to be false
994
+ expect(recs[1].openReadOnly).to be true
995
+ expect(recs[1].openEx).to be false
996
+ expect(recs[1].openReadOnlyEx).to be false
832
997
  # tables, views
833
998
  recs = mgr.tables("test_v3")
834
999
  expect(mgr.stat()).to eq 0
@@ -931,6 +1096,1022 @@ describe Transactd, 'V3Features' do
931
1096
  expect(mgr.stat()).to eq Transactd::ERROR_TD_HOSTNAME_NOT_FOUND
932
1097
  mgr.disconnect()
933
1098
  tb_other.close()
1099
+ db_other.abortTrn
934
1100
  db_other.close()
935
1101
  end
1102
+ it 'fetch_mode' do
1103
+ db = Transactd::Database.new()
1104
+ db.open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
1105
+ tb = db.openTable("user")
1106
+ expect(tb.stat()).to eq 0
1107
+ tb.seekFirst()
1108
+ expect(tb.stat()).to eq 0
1109
+ # test fetch field type (table)
1110
+ # FETCH_RECORD_INTO
1111
+ tb.fetchMode = Transactd::FETCH_RECORD_INTO
1112
+ expect(tb.fetchMode).to eq Transactd::FETCH_RECORD_INTO
1113
+ rec = tb.fields()
1114
+ # FIELD_VALUE_MODE_OBJECT
1115
+ Transactd::field_value_mode = Transactd::FIELD_VALUE_MODE_OBJECT
1116
+ expect(rec["id"].i()).to eq 1
1117
+ # FIELD_VALUE_MODE_VALUE
1118
+ Transactd::set_field_value_mode(Transactd::FIELD_VALUE_MODE_VALUE)
1119
+ expect(rec["id"]).to eq 1
1120
+ # FETCH_VAL_NUM
1121
+ tb.fetchMode = Transactd::FETCH_VAL_NUM
1122
+ expect(tb.fetchMode).to eq Transactd::FETCH_VAL_NUM
1123
+ rec = tb.fields()
1124
+ expect(rec[0]).to eq 1
1125
+ # FETCH_VAL_ASSOC
1126
+ tb.fetchMode = Transactd::FETCH_VAL_ASSOC
1127
+ expect(tb.fetchMode).to eq Transactd::FETCH_VAL_ASSOC
1128
+ rec = tb.fields()
1129
+ expect(rec["id"]).to eq 1
1130
+ # FETCH_VAL_BOTH
1131
+ tb.fetchMode = Transactd::FETCH_VAL_BOTH
1132
+ expect(tb.fetchMode).to eq Transactd::FETCH_VAL_BOTH
1133
+ rec = tb.fields()
1134
+ expect(rec[0]).to eq 1
1135
+ expect(rec["id"]).to eq 1
1136
+ # FETCH_OBJ
1137
+ tb.fetchMode = Transactd::FETCH_OBJ
1138
+ expect(tb.fetchMode).to eq Transactd::FETCH_OBJ
1139
+ usr = tb.fields()
1140
+ expect(usr.id).to eq 1
1141
+ expect(usr.名前).to eq "1 user"
1142
+ # FETCH_USR_CLASS
1143
+ tb.fetchMode = Transactd::FETCH_USR_CLASS
1144
+ User.reset_class
1145
+ tb.fetchClass = User
1146
+ tb.ctorArgs = ["1", "2", "3"]
1147
+ expect(tb.fetchMode).to eq Transactd::FETCH_USR_CLASS
1148
+ usr = tb.fields()
1149
+ expect(usr.id).to eq 1
1150
+ expect(usr.名前).to eq "1 user"
1151
+ expect(usr.a).to eq "1"
1152
+ expect(usr.b).to eq "2"
1153
+ expect(usr.c).to eq "3"
1154
+ tb.close()
1155
+ # test fetch field type (activeTable)
1156
+ at = Transactd::ActiveTable.new(db, "user")
1157
+ q = Transactd::Query.new()
1158
+ q.where("id", "<", 10)
1159
+ rs = at.index(0).keyValue(0).read(q)
1160
+ # FETCH_RECORD_INTO
1161
+ rs.fetchMode = Transactd::FETCH_RECORD_INTO
1162
+ expect(rs.fetchMode).to eq Transactd::FETCH_RECORD_INTO
1163
+ expect(rs.size()).to eq 9
1164
+ # FIELD_VALUE_MODE_OBJECT
1165
+ Transactd::setFieldValueMode(Transactd::FIELD_VALUE_MODE_OBJECT)
1166
+ expect(rs[0]["id"].i()).to eq 1
1167
+ # FIELD_VALUE_MODE_VALUE
1168
+ Transactd::field_value_mode = Transactd::FIELD_VALUE_MODE_VALUE
1169
+ expect(rs[0]["id"]).to eq 1
1170
+ # FETCH_VAL_NUM
1171
+ rs.fetchMode = Transactd::FETCH_VAL_NUM
1172
+ expect(rs.fetchMode).to eq Transactd::FETCH_VAL_NUM
1173
+ expect(rs.size()).to eq 9
1174
+ expect(rs[0][0]).to eq 1
1175
+ # FETCH_VAL_ASSOC
1176
+ rs.fetchMode = Transactd::FETCH_VAL_ASSOC
1177
+ expect(rs.fetchMode).to eq Transactd::FETCH_VAL_ASSOC
1178
+ expect(rs.size()).to eq 9
1179
+ expect(rs[0]["id"]).to eq 1
1180
+ # FETCH_VAL_BOTH
1181
+ rs.fetchMode = Transactd::FETCH_VAL_BOTH
1182
+ expect(rs.fetchMode).to eq Transactd::FETCH_VAL_BOTH
1183
+ expect(rs.size()).to eq 9
1184
+ expect(rs[0][0]).to eq 1
1185
+ expect(rs[0]["id"]).to eq 1
1186
+ # FETCH_OBJ
1187
+ rs.fetchMode = Transactd::FETCH_OBJ
1188
+ expect(rs.fetchMode).to eq Transactd::FETCH_OBJ
1189
+ expect(rs.size()).to eq 9
1190
+ expect(rs[0].id).to eq 1
1191
+ expect(rs[0].名前).to eq "1 user"
1192
+ # FETCH_USR_CLASS
1193
+ rs.fetchMode = Transactd::FETCH_USR_CLASS
1194
+ rs.fetchClass = User
1195
+ rs.ctorArgs = ["1", "2", "3"]
1196
+ expect(rs.fetchMode).to eq Transactd::FETCH_USR_CLASS
1197
+ expect(rs.size()).to eq 9
1198
+ expect(rs[1].id).to eq 2
1199
+ expect(rs[1].名前).to eq "2 user"
1200
+ expect(rs[0].a).to eq "1"
1201
+ expect(rs[0].b).to eq "2"
1202
+ expect(rs[0].c).to eq "3"
1203
+ at.release
1204
+ db.close()
1205
+ end
1206
+ it 'fetchMode, alias and UTF-8 field name' do
1207
+ Transactd::field_value_mode = Transactd::FIELD_VALUE_MODE_VALUE
1208
+ db = Transactd::Database.new()
1209
+ db.open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
1210
+ # table
1211
+ tb = db.openTable("user")
1212
+ expect(tb.stat()).to eq 0
1213
+ tb.seekFirst()
1214
+ expect(tb.stat()).to eq 0
1215
+ tb.setAlias("名前", "名前2")
1216
+ expect(tb.stat()).to eq 0
1217
+ # FETCH_OBJ (remove_original_name)
1218
+ tb.fetchMode = Transactd::FETCH_OBJ
1219
+ expect(tb.fetchMode).to eq Transactd::FETCH_OBJ
1220
+ usr = tb.fields()
1221
+ expect(usr.id).to eq 1
1222
+ expect(usr.respond_to?(:"名前")).to be false
1223
+ expect(usr.respond_to?(:"名前2")).to be true
1224
+ expect(usr.名前2).to eq "1 user"
1225
+ # FETCH_USR_CLASS
1226
+ tb.fetchMode = Transactd::FETCH_USR_CLASS
1227
+ expect(tb.fetchMode).to eq Transactd::FETCH_USR_CLASS
1228
+ tb.fetchClass = User
1229
+ tb.ctorArgs = ["1", "2", "3"]
1230
+ # define_original_name
1231
+ User.reset_class
1232
+ User.alias_attribute("名前2", "名前")
1233
+ User.define_original_name
1234
+ usr = tb.fields()
1235
+ expect(usr.id).to eq 1
1236
+ expect(usr.respond_to?(:"名前")).to be true
1237
+ expect(usr.respond_to?(:"名前2")).to be true
1238
+ expect(usr.名前).to eq "1 user"
1239
+ expect(usr.名前2).to eq "1 user"
1240
+ expect(usr.a).to eq "1"
1241
+ expect(usr.b).to eq "2"
1242
+ expect(usr.c).to eq "3"
1243
+ # remove_original_name
1244
+ User.reset_class
1245
+ User.alias_attribute("名前2", "名前")
1246
+ User.remove_original_name
1247
+ usr = tb.fields()
1248
+ expect(usr.id).to eq 1
1249
+ expect(usr.respond_to?(:"名前")).to be false
1250
+ expect(usr.respond_to?(:"名前2")).to be true
1251
+ expect(usr.名前2).to eq "1 user"
1252
+ expect(usr.a).to eq "1"
1253
+ expect(usr.b).to eq "2"
1254
+ expect(usr.c).to eq "3"
1255
+ tb.close
1256
+ # activeTable
1257
+ at = Transactd::ActiveTable.new(db, "user")
1258
+ at.alias("名前", "名前2")
1259
+ q = Transactd::Query.new()
1260
+ q.where("id", "<", 10)
1261
+ rs = at.index(0).keyValue(0).read(q)
1262
+ expect(rs.size()).to eq 9
1263
+ # FETCH_OBJ (remove_original_name)
1264
+ rs.fetchMode = Transactd::FETCH_OBJ
1265
+ expect(rs.fetchMode).to eq Transactd::FETCH_OBJ
1266
+ expect(rs[0].id).to eq 1
1267
+ expect(rs[0].respond_to?(:"名前")).to be false
1268
+ expect(rs[0].respond_to?(:"名前2")).to be true
1269
+ expect(rs[0].名前2).to eq "1 user"
1270
+ # FETCH_USR_CLASS
1271
+ rs.fetchMode = Transactd::FETCH_USR_CLASS
1272
+ expect(rs.fetchMode).to eq Transactd::FETCH_USR_CLASS
1273
+ rs.fetchClass = User
1274
+ rs.ctorArgs = ["1", "2", "3"]
1275
+ # define_original_name
1276
+ User.reset_class
1277
+ User.alias_attribute("名前2", "名前")
1278
+ User.define_original_name
1279
+ expect(rs[0].id).to eq 1
1280
+ expect(rs[0].respond_to?(:"名前")).to be true
1281
+ expect(rs[0].respond_to?(:"名前2")).to be true
1282
+ expect(rs[0].名前).to eq "1 user"
1283
+ expect(rs[0].名前2).to eq "1 user"
1284
+ # remove_original_name
1285
+ User.reset_class
1286
+ User.alias_attribute("名前2", "名前")
1287
+ User.remove_original_name
1288
+ expect(rs[0].id).to eq 1
1289
+ expect(rs[0].respond_to?(:"名前")).to be false
1290
+ expect(rs[0].respond_to?(:"名前2")).to be true
1291
+ expect(rs[0].名前2).to eq "1 user"
1292
+ at.release
1293
+ db.close
1294
+ end
1295
+ it 'set_value_by_object, alias and UTF-8 field name' do
1296
+ Transactd::field_value_mode = Transactd::FIELD_VALUE_MODE_VALUE
1297
+ db = Transactd::Database.new()
1298
+ db.open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
1299
+ # table
1300
+ tb = db.openTable("user")
1301
+ expect(tb.stat()).to eq 0
1302
+ # FETCH_OBJ, no alias
1303
+ tb.seekFirst()
1304
+ expect(tb.stat()).to eq 0
1305
+ tb.fetchMode = Transactd::FETCH_RECORD_INTO
1306
+ expect(tb.fetchMode).to eq Transactd::FETCH_RECORD_INTO
1307
+ rec = tb.fields()
1308
+ tb.fetchMode = Transactd::FETCH_OBJ
1309
+ expect(tb.fetchMode).to eq Transactd::FETCH_OBJ
1310
+ usr = tb.fields()
1311
+ expect(usr.名前).to eq "1 user"
1312
+ expect(usr.respond_to?(:"名前2")).to be false
1313
+ usr.名前 = "1 ユーザー"
1314
+ rec.set_value_by_object(usr)
1315
+ usr2 = tb.fields()
1316
+ expect(usr2.名前).to eq "1 ユーザー"
1317
+ expect(usr2.respond_to?(:"名前2")).to be false
1318
+ # FETCH_USR_CLASS, no alias
1319
+ tb.seekFirst()
1320
+ expect(tb.stat()).to eq 0
1321
+ tb.fetchMode = Transactd::FETCH_RECORD_INTO
1322
+ expect(tb.fetchMode).to eq Transactd::FETCH_RECORD_INTO
1323
+ rec = tb.fields()
1324
+ tb.fetchMode = Transactd::FETCH_USR_CLASS
1325
+ expect(tb.fetchMode).to eq Transactd::FETCH_USR_CLASS
1326
+ tb.fetchClass = User
1327
+ tb.ctorArgs = ["1", "2", "3"]
1328
+ User.reset_class
1329
+ User.remove_original_name
1330
+ usr = tb.fields()
1331
+ expect(usr.名前).to eq "1 user"
1332
+ expect(usr.respond_to?(:"名前2")).to be false
1333
+ usr.名前 = "1 ユーザー"
1334
+ rec.set_value_by_object(usr)
1335
+ usr2 = tb.fields()
1336
+ expect(usr2.名前).to eq "1 ユーザー"
1337
+ expect(usr2.respond_to?(:"名前2")).to be false
1338
+ # FETCH_OBJ, with alias
1339
+ tb.setAlias("名前", "名前2")
1340
+ expect(tb.stat()).to eq 0
1341
+ tb.seekFirst()
1342
+ expect(tb.stat()).to eq 0
1343
+ tb.fetchMode = Transactd::FETCH_RECORD_INTO
1344
+ expect(tb.fetchMode).to eq Transactd::FETCH_RECORD_INTO
1345
+ rec = tb.fields()
1346
+ tb.fetchMode = Transactd::FETCH_OBJ
1347
+ expect(tb.fetchMode).to eq Transactd::FETCH_OBJ
1348
+ usr = tb.fields()
1349
+ expect(usr.respond_to?(:"名前")).to be false
1350
+ expect(usr.名前2).to eq "1 user"
1351
+ usr.名前2 = "1 ユーザー"
1352
+ rec.set_value_by_object(usr)
1353
+ usr2 = tb.fields()
1354
+ expect(usr2.respond_to?(:"名前")).to be false
1355
+ expect(usr2.名前2).to eq "1 ユーザー"
1356
+ # FETCH_USR_CLASS, with alias, remove_original_name
1357
+ tb.seekFirst()
1358
+ expect(tb.stat()).to eq 0
1359
+ tb.fetchMode = Transactd::FETCH_RECORD_INTO
1360
+ expect(tb.fetchMode).to eq Transactd::FETCH_RECORD_INTO
1361
+ rec = tb.fields()
1362
+ tb.fetchMode = Transactd::FETCH_USR_CLASS
1363
+ expect(tb.fetchMode).to eq Transactd::FETCH_USR_CLASS
1364
+ tb.fetchClass = User
1365
+ tb.ctorArgs = ["1", "2", "3"]
1366
+ User.reset_class
1367
+ User.alias_attribute("名前2", "名前")
1368
+ User.remove_original_name
1369
+ usr = tb.fields()
1370
+ expect(usr.respond_to?(:"名前")).to be false
1371
+ expect(usr.名前2).to eq "1 user"
1372
+ usr.名前2 = "1 ユーザー"
1373
+ rec.set_value_by_object(usr)
1374
+ usr2 = tb.fields()
1375
+ expect(usr2.respond_to?(:"名前")).to be false
1376
+ expect(usr2.名前2).to eq "1 ユーザー"
1377
+ # FETCH_USR_CLASS, with alias, define_original_name
1378
+ tb.seekFirst()
1379
+ expect(tb.stat()).to eq 0
1380
+ tb.fetchMode = Transactd::FETCH_RECORD_INTO
1381
+ expect(tb.fetchMode).to eq Transactd::FETCH_RECORD_INTO
1382
+ rec = tb.fields()
1383
+ tb.fetchMode = Transactd::FETCH_USR_CLASS
1384
+ expect(tb.fetchMode).to eq Transactd::FETCH_USR_CLASS
1385
+ tb.fetchClass = User
1386
+ tb.ctorArgs = ["1", "2", "3"]
1387
+ User.reset_class
1388
+ User.alias_attribute("名前2", "名前")
1389
+ User.define_original_name
1390
+ usr = tb.fields()
1391
+ expect(usr.名前).to eq "1 user"
1392
+ expect(usr.名前2).to eq "1 user"
1393
+ usr.名前2 = "1 ユーザー 名前2"
1394
+ rec.set_value_by_object(usr)
1395
+ usr2 = tb.fields()
1396
+ expect(usr2.名前).to eq "1 ユーザー 名前2"
1397
+ expect(usr2.名前2).to eq "1 ユーザー 名前2"
1398
+ usr.名前 = "1 ユーザー 名前"
1399
+ rec.set_value_by_object(usr)
1400
+ usr3 = tb.fields()
1401
+ expect(usr3.名前).to eq "1 ユーザー 名前"
1402
+ expect(usr3.名前2).to eq "1 ユーザー 名前"
1403
+ tb.close
1404
+ # activeTable
1405
+ at = Transactd::ActiveTable.new(db, "user")
1406
+ q = Transactd::Query.new()
1407
+ q.where("id", "<", 10)
1408
+ # FETCH_OBJ, no alias
1409
+ rs = at.index(0).keyValue(0).read(q)
1410
+ expect(rs.size()).to eq 9
1411
+ rs.fetchMode = Transactd::FETCH_RECORD_INTO
1412
+ expect(rs.fetchMode).to eq Transactd::FETCH_RECORD_INTO
1413
+ rec = rs[0]
1414
+ rs.fetchMode = Transactd::FETCH_OBJ
1415
+ expect(rs.fetchMode).to eq Transactd::FETCH_OBJ
1416
+ usr = rs[0]
1417
+ expect(usr.名前).to eq "1 user"
1418
+ expect(usr.respond_to?(:"名前2")).to be false
1419
+ usr.名前 = "1 ユーザー"
1420
+ rec.set_value_by_object(usr)
1421
+ usr2 = rs[0]
1422
+ expect(usr2.名前).to eq "1 ユーザー"
1423
+ expect(usr2.respond_to?(:"名前2")).to be false
1424
+ # FETCH_USR_CLASS, no alias
1425
+ rs = at.index(0).keyValue(0).read(q)
1426
+ expect(rs.size()).to eq 9
1427
+ rs.fetchMode = Transactd::FETCH_RECORD_INTO
1428
+ expect(rs.fetchMode).to eq Transactd::FETCH_RECORD_INTO
1429
+ rec = rs[0]
1430
+ rs.fetchMode = Transactd::FETCH_USR_CLASS
1431
+ expect(rs.fetchMode).to eq Transactd::FETCH_USR_CLASS
1432
+ rs.fetchClass = User
1433
+ rs.ctorArgs = ["1", "2", "3"]
1434
+ User.reset_class
1435
+ User.remove_original_name
1436
+ usr = rs[0]
1437
+ expect(usr.名前).to eq "1 user"
1438
+ expect(usr.respond_to?(:"名前2")).to be false
1439
+ usr.名前 = "1 ユーザー"
1440
+ rec.set_value_by_object(usr)
1441
+ usr2 = rs[0]
1442
+ expect(usr2.名前).to eq "1 ユーザー"
1443
+ expect(usr2.respond_to?(:"名前2")).to be false
1444
+ # FETCH_OBJ, with alias
1445
+ at.alias("名前", "名前2")
1446
+ rs = at.index(0).keyValue(0).read(q)
1447
+ expect(rs.size()).to eq 9
1448
+ rs.fetchMode = Transactd::FETCH_RECORD_INTO
1449
+ expect(rs.fetchMode).to eq Transactd::FETCH_RECORD_INTO
1450
+ rec = rs[0]
1451
+ rs.fetchMode = Transactd::FETCH_OBJ
1452
+ expect(rs.fetchMode).to eq Transactd::FETCH_OBJ
1453
+ usr = rs[0]
1454
+ expect(usr.respond_to?(:"名前")).to be false
1455
+ expect(usr.名前2).to eq "1 user"
1456
+ usr.名前2 = "1 ユーザー"
1457
+ rec.set_value_by_object(usr)
1458
+ usr2 = rs[0]
1459
+ expect(usr2.respond_to?(:"名前")).to be false
1460
+ expect(usr2.名前2).to eq "1 ユーザー"
1461
+ # FETCH_USR_CLASS, with alias, remove_original_name
1462
+ rs = at.index(0).keyValue(0).read(q)
1463
+ expect(rs.size()).to eq 9
1464
+ rs.fetchMode = Transactd::FETCH_RECORD_INTO
1465
+ expect(rs.fetchMode).to eq Transactd::FETCH_RECORD_INTO
1466
+ rec = rs[0]
1467
+ rs.fetchMode = Transactd::FETCH_USR_CLASS
1468
+ expect(rs.fetchMode).to eq Transactd::FETCH_USR_CLASS
1469
+ rs.fetchClass = User
1470
+ rs.ctorArgs = ["1", "2", "3"]
1471
+ User.reset_class
1472
+ User.alias_attribute("名前2", "名前")
1473
+ User.remove_original_name
1474
+ usr = rs[0]
1475
+ expect(usr.respond_to?(:"名前")).to be false
1476
+ expect(usr.名前2).to eq "1 user"
1477
+ usr.名前2 = "1 ユーザー"
1478
+ rec.set_value_by_object(usr)
1479
+ usr2 = rs[0]
1480
+ expect(usr2.respond_to?(:"名前")).to be false
1481
+ expect(usr2.名前2).to eq "1 ユーザー"
1482
+ # FETCH_USR_CLASS, with alias, define_original_name
1483
+ rs = at.index(0).keyValue(0).read(q)
1484
+ expect(rs.size()).to eq 9
1485
+ rs.fetchMode = Transactd::FETCH_RECORD_INTO
1486
+ expect(rs.fetchMode).to eq Transactd::FETCH_RECORD_INTO
1487
+ rec = rs[0]
1488
+ rs.fetchMode = Transactd::FETCH_USR_CLASS
1489
+ expect(rs.fetchMode).to eq Transactd::FETCH_USR_CLASS
1490
+ rs.fetchClass = User
1491
+ rs.ctorArgs = ["1", "2", "3"]
1492
+ User.reset_class
1493
+ User.alias_attribute("名前2", "名前")
1494
+ User.define_original_name
1495
+ usr = rs[0]
1496
+ expect(usr.名前).to eq "1 user"
1497
+ expect(usr.名前2).to eq "1 user"
1498
+ usr.名前2 = "1 ユーザー 名前2"
1499
+ rec.set_value_by_object(usr)
1500
+ usr2 = rs[0]
1501
+ expect(usr2.名前).to eq "1 ユーザー 名前2"
1502
+ expect(usr2.名前2).to eq "1 ユーザー 名前2"
1503
+ usr.名前 = "1 ユーザー 名前"
1504
+ rec.set_value_by_object(usr)
1505
+ usr3 = rs[0]
1506
+ expect(usr3.名前).to eq "1 ユーザー 名前"
1507
+ expect(usr3.名前2).to eq "1 ユーザー 名前"
1508
+ at.release
1509
+ db.close
1510
+ end
1511
+ it 'set_ailas' do
1512
+ db = Transactd::Database.new()
1513
+ db.open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
1514
+ tb = db.openTable("user")
1515
+ expect(tb.stat()).to eq 0
1516
+ tb.setAlias("名前", "name")
1517
+ tb.setAlias("id", "user_id")
1518
+ expect(tb.fieldNumByName("user_id")).to eq 0
1519
+ tb.seekFirst()
1520
+ expect(tb.stat()).to eq 0
1521
+ tb.fetchMode = Transactd::FETCH_USR_CLASS
1522
+ User.reset_class
1523
+ User.alias_attribute("name", "名前")
1524
+ User.alias_attribute("user_id", "id")
1525
+ User.define_original_name
1526
+ tb.fetchClass = User
1527
+ tb.ctorArgs = ["1", "2", "3"]
1528
+ expect(tb.fetchMode).to eq Transactd::FETCH_USR_CLASS
1529
+ usr = tb.fields()
1530
+ expect(usr.id).to eq 1
1531
+ expect(usr.user_id).to eq 1
1532
+ expect(usr.名前).to eq "1 user"
1533
+ expect(usr.name).to eq "1 user"
1534
+ q = Transactd::Query.new()
1535
+ q.select("name").where("id", "<", 10)
1536
+ tb.setQuery(q)
1537
+ tb.clearBuffer()
1538
+ users = tb.findAll()
1539
+ expect(users.length).to eq 9
1540
+ expect(users[0].name).to eq "1 user"
1541
+ tb.close()
1542
+ db.close()
1543
+ end
1544
+ it 'CRUD operations with object' do
1545
+ db = Transactd::Database.new()
1546
+ db.open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
1547
+ tb = db.openTable("user")
1548
+ expect(tb.stat()).to eq 0
1549
+ tb.setAlias("名前", "name")
1550
+ tb.seekFirst()
1551
+ expect(tb.stat()).to eq 0
1552
+ tb.fetchMode = Transactd::FETCH_USR_CLASS
1553
+ User.reset_class
1554
+ tb.fetchClass = User
1555
+ tb.ctorArgs = ["1", "2", "3"]
1556
+ expect(tb.fetchMode).to eq Transactd::FETCH_USR_CLASS
1557
+ # Insert
1558
+ usr = tb.fields()
1559
+ usr.id = 0
1560
+ usr.name = 'test_insertObject'
1561
+ expect(tb.insert_by_object(usr)).to eq true
1562
+ tb.seekLast()
1563
+ usr = tb.fields()
1564
+ expect(usr.name).to eq 'test_insertObject'
1565
+ expect(usr.id).to eq 1001
1566
+ # Update
1567
+ usr.name = 'test_UpdateObject'
1568
+ expect(tb.update_by_object(usr)).to eq true
1569
+ usr.name = ''
1570
+ # Read
1571
+ expect(tb.read_by_object(usr)).to eq true
1572
+ expect(usr.name).to eq 'test_UpdateObject'
1573
+ expect(usr.id).to eq 1001
1574
+ row = tb.getRecord()
1575
+ row.set_value_by_object(usr)
1576
+ usr2 = tb.fields()
1577
+ expect(usr2.a).to eq usr.a
1578
+ expect(usr2.b).to eq usr.b
1579
+ expect(usr2.c).to eq usr.c
1580
+ expect(usr2.id).to eq usr.id
1581
+ expect(usr2.name).to eq usr.name
1582
+ expect(usr2.group).to eq usr.group
1583
+ expect(usr2.tel).to eq usr.tel
1584
+ expect(usr2.update_datetime).to eq usr.update_datetime
1585
+ expect(usr2.create_datetime).to eq usr.create_datetime
1586
+ # Delete
1587
+ expect(tb.delete_by_object(usr)).to eq true
1588
+ tb.seekLast()
1589
+ usr = tb.fields()
1590
+ expect(usr.id).to eq 1000
1591
+ tb.close
1592
+ db.close
1593
+ end
1594
+ it 'test UCC' do
1595
+ db = Transactd::Database.new()
1596
+ db.open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
1597
+ tb = db.openTable("user")
1598
+ tb2 = db.openTable("user")
1599
+ # test ChangeCurrentCc
1600
+ # updateConflictCheck true
1601
+ db.beginTrn()
1602
+ tb.seekFirst()
1603
+ expect(tb.stat()).to eq 0
1604
+ tb2.seekFirst()
1605
+ expect(tb2.stat()).to eq 0
1606
+ tb.setFV("名前", 'John')
1607
+ tb.update()
1608
+ expect(tb.stat()).to eq 0
1609
+ tb2.setFV("名前", 'mike')
1610
+ tb2.setUpdateConflictCheck(true)
1611
+ expect(tb2.updateConflictCheck()).to eq true
1612
+ tb2.update(Transactd::Nstable::ChangeCurrentCc)
1613
+ expect(tb2.stat()).to eq Transactd::STATUS_CHANGE_CONFLICT
1614
+ db.abortTrn()
1615
+ # updateConflictCheck false
1616
+ db.beginTrn()
1617
+ tb.seekFirst()
1618
+ expect(tb.stat()).to eq 0
1619
+ tb2.seekFirst()
1620
+ expect(tb2.stat()).to eq 0
1621
+ tb.setFV("名前", 'John')
1622
+ tb.update()
1623
+ expect(tb.stat()).to eq 0
1624
+ tb2.setFV("名前", 'mike')
1625
+ tb2.setUpdateConflictCheck(false)
1626
+ expect(tb2.updateConflictCheck()).to eq false
1627
+ tb2.update(Transactd::Nstable::ChangeCurrentCc)
1628
+ expect(tb2.stat()).to eq 0
1629
+ db.abortTrn()
1630
+ # test ChangeInKey
1631
+ # updateConflictCheck true
1632
+ db.beginTrn()
1633
+ tb.seekFirst()
1634
+ expect(tb.stat()).to eq 0
1635
+ tb2.seekFirst()
1636
+ expect(tb2.stat()).to eq 0
1637
+ tb.setFV("名前", 'John')
1638
+ tb.update()
1639
+ expect(tb.stat()).to eq 0
1640
+ tb2.setFV("名前", 'mike')
1641
+ tb2.setUpdateConflictCheck(true)
1642
+ expect(tb2.updateConflictCheck()).to eq true
1643
+ tb2.update(Transactd::Nstable::ChangeInKey)
1644
+ expect(tb2.stat()).to eq Transactd::STATUS_CHANGE_CONFLICT
1645
+ db.abortTrn()
1646
+ # updateConflictCheck false
1647
+ db.beginTrn()
1648
+ tb.seekFirst()
1649
+ expect(tb.stat()).to eq 0
1650
+ tb2.seekFirst()
1651
+ expect(tb2.stat()).to eq 0
1652
+ tb.setFV("名前", 'John')
1653
+ tb.update()
1654
+ expect(tb.stat()).to eq 0
1655
+ tb2.setFV("名前", 'mike')
1656
+ tb2.setUpdateConflictCheck(false)
1657
+ expect(tb2.updateConflictCheck()).to eq false
1658
+ tb2.update(Transactd::Nstable::ChangeInKey)
1659
+ expect(tb2.stat()).to eq 0
1660
+ db.abortTrn()
1661
+ tb.close
1662
+ tb2.close
1663
+ db.close
1664
+ end
1665
+ it 'test transfer' do
1666
+ db = Transactd::Database.new()
1667
+ db.open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
1668
+ tb = db.openTable("user")
1669
+ expect(tb.stat()).to eq 0
1670
+ tb.seekFirst()
1671
+ expect(tb.stat()).to eq 0
1672
+ tb.setAlias("名前", "name")
1673
+ usr = UserT.new()
1674
+ usr.id = 5
1675
+ expect(tb.read_by_object(usr)).to be true
1676
+ expect(usr.id).to eq 5
1677
+ expect(usr.phone.number.tel).to eq '0236-99-9999'
1678
+ UserT.setTransferMap(1)
1679
+ usr.id = 5
1680
+ expect(tb.read_by_object(usr)).to be true # No error
1681
+ expect(usr.id).to eq 5
1682
+ expect(usr.phone2).to be nil
1683
+ UserT.setTransferMap(2)
1684
+ usr.id = 5
1685
+ expect(tb.read_by_object(usr)).to be true # No error
1686
+ expect(usr.id).to eq 5
1687
+ expect(usr.phone.number2).to be nil
1688
+ tb.close
1689
+ db.close
1690
+ end
1691
+ it 'test with object option' do
1692
+ db = Transactd::Database.new()
1693
+ db.open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
1694
+ tb = db.openTable("user")
1695
+ expect(tb.stat()).to eq 0
1696
+ tb.setAlias("名前", "name")
1697
+ usr = UserT.new()
1698
+ # read option (key number)
1699
+ tb.setKeyNum(0)
1700
+ usr.id = 5
1701
+ expect(tb.read_by_object(usr, 2)).to be false
1702
+ expect(tb.keyNum()).to eq 2
1703
+ expect(tb.read_by_object(usr)).to be true
1704
+ expect(tb.keyNum()).to eq 0
1705
+ # update option (eUpdateType)
1706
+ expect(tb.read_by_object(usr, 2)).to be false # No currency
1707
+ expect(tb.update_by_object(usr, Transactd::Nstable::ChangeCurrentCc)).to eq false
1708
+ expect(tb.update_by_object(usr)).to be true # default value Nstable::changeInKey
1709
+ # delete option
1710
+ usr.id = 0
1711
+ expect(tb.insert_by_object(usr)).to be true # Insert id = 1001
1712
+ tb.fetchMode = Transactd::FETCH_USR_CLASS
1713
+ tb.fetchClass = UserT
1714
+ tb.seekLast
1715
+ expect(tb.stat).to eq 0
1716
+ usr = tb.getRow
1717
+ id = usr.id
1718
+ usr.id = 1005
1719
+ expect(tb.read_by_object(usr)).to be false # No currency
1720
+ usr.id = id
1721
+ tb.setKeyNum(2)
1722
+ expect(tb.delete_by_object(usr, false)).to be false # inKey
1723
+ expect(tb.delete_by_object(usr)).to be true # default value true
1724
+ tb.close
1725
+ db.close
1726
+ end
1727
+ it 'test transfer_map on define and read' do
1728
+ Transactd::field_value_mode = Transactd::FIELD_VALUE_MODE_VALUE
1729
+ db = Transactd::Database.new()
1730
+ db.open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
1731
+ tb = db.openTable("user")
1732
+ tb.fetchMode = Transactd::FETCH_USR_CLASS
1733
+ expect(tb.fetchMode).to eq Transactd::FETCH_USR_CLASS
1734
+ tb.fetchClass = User
1735
+ tb.ctorArgs = ["1", "2", "3"]
1736
+ # without alias, without nest
1737
+ User.reset_class
1738
+ User.transfer_map = {
1739
+ update_datetime: :datetime,
1740
+ create_datetime: :datetime
1741
+ }
1742
+ tb.seekFirst
1743
+ expect(tb.stat()).to eq 0
1744
+ rec = tb.fields
1745
+ expect(rec.id).to eq 1
1746
+ expect(rec.名前).to eq "1 user"
1747
+ expect(rec.a).to eq "1"
1748
+ expect(rec.b).to eq "2"
1749
+ expect(rec.c).to eq "3"
1750
+ expect(rec.respond_to?(:update_datetime)).to be false
1751
+ expect(rec.respond_to?(:create_datetime)).to be false
1752
+ expect(rec.datetime.update_datetime.nil?).to be false
1753
+ expect(rec.datetime.create_datetime.nil?).to be false
1754
+ expect(rec.aliased_datetime.empty?).to be true
1755
+ expect(rec.nest.datetime.empty?).to be true
1756
+ expect(rec.nest.aliased_datetime.empty?).to be true
1757
+ # without alias, with nest
1758
+ User.reset_class
1759
+ User.transfer_map = {
1760
+ update_datetime: [:nest, :datetime],
1761
+ create_datetime: [:nest, :datetime]
1762
+ }
1763
+ tb.seekFirst
1764
+ expect(tb.stat()).to eq 0
1765
+ rec = tb.fields
1766
+ expect(rec.id).to eq 1
1767
+ expect(rec.名前).to eq "1 user"
1768
+ expect(rec.a).to eq "1"
1769
+ expect(rec.b).to eq "2"
1770
+ expect(rec.c).to eq "3"
1771
+ expect(rec.respond_to?(:update_datetime)).to be false
1772
+ expect(rec.respond_to?(:create_datetime)).to be false
1773
+ expect(rec.datetime.empty?).to be true
1774
+ expect(rec.aliased_datetime.empty?).to be true
1775
+ expect(rec.nest.datetime.update_datetime.nil?).to be false
1776
+ expect(rec.nest.datetime.create_datetime.nil?).to be false
1777
+ expect(rec.nest.aliased_datetime.empty?).to be true
1778
+ # with alias, without nest
1779
+ tb.setAlias("update_datetime", "update")
1780
+ tb.setAlias("create_datetime", "create")
1781
+ User.reset_class
1782
+ User.alias_attribute("update", "update_datetime")
1783
+ User.alias_attribute("create", "create_datetime")
1784
+ User.transfer_map = {
1785
+ update: :aliased_datetime,
1786
+ create: :aliased_datetime
1787
+ }
1788
+ tb.seekFirst
1789
+ expect(tb.stat()).to eq 0
1790
+ rec = tb.fields
1791
+ expect(rec.id).to eq 1
1792
+ expect(rec.名前).to eq "1 user"
1793
+ expect(rec.a).to eq "1"
1794
+ expect(rec.b).to eq "2"
1795
+ expect(rec.c).to eq "3"
1796
+ expect(rec.respond_to?(:update_datetime)).to be false
1797
+ expect(rec.respond_to?(:create_datetime)).to be false
1798
+ expect(rec.respond_to?(:update)).to be false
1799
+ expect(rec.respond_to?(:create)).to be false
1800
+ expect(rec.datetime.empty?).to be true
1801
+ expect(rec.aliased_datetime.update.nil?).to be false
1802
+ expect(rec.aliased_datetime.create.nil?).to be false
1803
+ expect(rec.nest.datetime.empty?).to be true
1804
+ expect(rec.nest.aliased_datetime.empty?).to be true
1805
+ # with alias, with nest
1806
+ User.reset_class
1807
+ User.alias_attribute("update", "update_datetime")
1808
+ User.alias_attribute("create", "create_datetime")
1809
+ User.transfer_map = {
1810
+ update: [:nest, :aliased_datetime],
1811
+ create: [:nest, :aliased_datetime]
1812
+ }
1813
+ tb.seekFirst
1814
+ expect(tb.stat()).to eq 0
1815
+ rec = tb.fields
1816
+ expect(rec.id).to eq 1
1817
+ expect(rec.名前).to eq "1 user"
1818
+ expect(rec.a).to eq "1"
1819
+ expect(rec.b).to eq "2"
1820
+ expect(rec.c).to eq "3"
1821
+ expect(rec.respond_to?(:update_datetime)).to be false
1822
+ expect(rec.respond_to?(:create_datetime)).to be false
1823
+ expect(rec.respond_to?(:update)).to be false
1824
+ expect(rec.respond_to?(:create)).to be false
1825
+ expect(rec.datetime.empty?).to be true
1826
+ expect(rec.aliased_datetime.empty?).to be true
1827
+ expect(rec.nest.datetime.empty?).to be true
1828
+ expect(rec.nest.aliased_datetime.update.nil?).to be false
1829
+ expect(rec.nest.aliased_datetime.create.nil?).to be false
1830
+ User.reset_class
1831
+ tb.close
1832
+ db.close
1833
+ end
1834
+ it 'test transfer_map on define and set_value_by_object' do
1835
+ sample_datetime = "2016-11-01 12:34:56"
1836
+ db = Transactd::Database.new()
1837
+ db.open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
1838
+ tb = db.openTable("user")
1839
+ tb.fetchClass = User
1840
+ tb.ctorArgs = ["1", "2", "3"]
1841
+ # without alias, without nest
1842
+ User.reset_class
1843
+ User.transfer_map = {
1844
+ update_datetime: :datetime,
1845
+ create_datetime: :datetime
1846
+ }
1847
+ tb.seekFirst
1848
+ expect(tb.stat()).to eq 0
1849
+ tb.fetchMode = Transactd::FETCH_RECORD_INTO
1850
+ expect(tb.fetchMode).to eq Transactd::FETCH_RECORD_INTO
1851
+ rec = tb.fields
1852
+ expect(tb.stat()).to eq 0
1853
+ tb.fetchMode = Transactd::FETCH_USR_CLASS
1854
+ expect(tb.fetchMode).to eq Transactd::FETCH_USR_CLASS
1855
+ obj = tb.fields
1856
+ expect(obj.id).to eq 1
1857
+ expect(obj.名前).to eq "1 user"
1858
+ expect(obj.datetime.update_datetime.nil?).to be false
1859
+ expect(obj.datetime.update_datetime).not_to start_with sample_datetime
1860
+ obj.名前 = "1 ユーザー"
1861
+ obj.datetime.update_datetime = sample_datetime
1862
+ rec.set_value_by_object(obj)
1863
+ obj2 = tb.fields
1864
+ expect(obj2.id).to eq 1
1865
+ expect(obj2.名前).to eq "1 ユーザー"
1866
+ expect(obj2.datetime.update_datetime.nil?).to be false
1867
+ expect(obj2.datetime.update_datetime).to start_with sample_datetime
1868
+ # without alias, with nest
1869
+ User.reset_class
1870
+ User.transfer_map = {
1871
+ update_datetime: [:nest, :datetime],
1872
+ create_datetime: [:nest, :datetime]
1873
+ }
1874
+ tb.seekFirst
1875
+ expect(tb.stat()).to eq 0
1876
+ tb.fetchMode = Transactd::FETCH_RECORD_INTO
1877
+ expect(tb.fetchMode).to eq Transactd::FETCH_RECORD_INTO
1878
+ rec = tb.fields
1879
+ expect(tb.stat()).to eq 0
1880
+ tb.fetchMode = Transactd::FETCH_USR_CLASS
1881
+ expect(tb.fetchMode).to eq Transactd::FETCH_USR_CLASS
1882
+ obj = tb.fields
1883
+ expect(obj.id).to eq 1
1884
+ expect(obj.名前).to eq "1 user"
1885
+ expect(obj.nest.datetime.update_datetime.nil?).to be false
1886
+ expect(obj.nest.datetime.update_datetime).not_to start_with sample_datetime
1887
+ obj.名前 = "1 ユーザー"
1888
+ obj.nest.datetime.update_datetime = sample_datetime
1889
+ rec.set_value_by_object(obj)
1890
+ obj2 = tb.fields
1891
+ expect(obj2.id).to eq 1
1892
+ expect(obj2.名前).to eq "1 ユーザー"
1893
+ expect(obj2.nest.datetime.update_datetime.nil?).to be false
1894
+ expect(obj2.nest.datetime.update_datetime).to start_with sample_datetime
1895
+ # with alias, without nest
1896
+ tb.setAlias("update_datetime", "update")
1897
+ tb.setAlias("create_datetime", "create")
1898
+ User.reset_class
1899
+ User.alias_attribute("update", "update_datetime")
1900
+ User.alias_attribute("create", "create_datetime")
1901
+ User.transfer_map = {
1902
+ update: :aliased_datetime,
1903
+ create: :aliased_datetime
1904
+ }
1905
+ tb.seekFirst
1906
+ expect(tb.stat()).to eq 0
1907
+ tb.fetchMode = Transactd::FETCH_RECORD_INTO
1908
+ expect(tb.fetchMode).to eq Transactd::FETCH_RECORD_INTO
1909
+ rec = tb.fields
1910
+ expect(tb.stat()).to eq 0
1911
+ tb.fetchMode = Transactd::FETCH_USR_CLASS
1912
+ expect(tb.fetchMode).to eq Transactd::FETCH_USR_CLASS
1913
+ obj = tb.fields
1914
+ expect(obj.id).to eq 1
1915
+ expect(obj.名前).to eq "1 user"
1916
+ expect(obj.aliased_datetime.update.nil?).to be false
1917
+ expect(obj.aliased_datetime.update).not_to start_with sample_datetime
1918
+ obj.名前 = "1 ユーザー"
1919
+ obj.aliased_datetime.update = sample_datetime
1920
+ rec.set_value_by_object(obj)
1921
+ obj2 = tb.fields
1922
+ expect(obj2.id).to eq 1
1923
+ expect(obj2.名前).to eq "1 ユーザー"
1924
+ expect(obj2.aliased_datetime.update.nil?).to be false
1925
+ expect(obj2.aliased_datetime.update).to start_with sample_datetime
1926
+ # with alias, with nest
1927
+ User.reset_class
1928
+ User.alias_attribute("update", "update_datetime")
1929
+ User.alias_attribute("create", "create_datetime")
1930
+ User.transfer_map = {
1931
+ update: [:nest, :aliased_datetime],
1932
+ create: [:nest, :aliased_datetime]
1933
+ }
1934
+ tb.seekFirst
1935
+ expect(tb.stat()).to eq 0
1936
+ tb.fetchMode = Transactd::FETCH_RECORD_INTO
1937
+ expect(tb.fetchMode).to eq Transactd::FETCH_RECORD_INTO
1938
+ rec = tb.fields
1939
+ expect(tb.stat()).to eq 0
1940
+ tb.fetchMode = Transactd::FETCH_USR_CLASS
1941
+ expect(tb.fetchMode).to eq Transactd::FETCH_USR_CLASS
1942
+ obj = tb.fields
1943
+ expect(obj.id).to eq 1
1944
+ expect(obj.名前).to eq "1 user"
1945
+ expect(obj.nest.aliased_datetime.update.nil?).to be false
1946
+ expect(obj.nest.aliased_datetime.update).not_to start_with sample_datetime
1947
+ obj.名前 = "1 ユーザー"
1948
+ obj.nest.aliased_datetime.update = sample_datetime
1949
+ rec.set_value_by_object(obj)
1950
+ obj2 = tb.fields
1951
+ expect(obj2.id).to eq 1
1952
+ expect(obj2.名前).to eq "1 ユーザー"
1953
+ expect(obj2.nest.aliased_datetime.update.nil?).to be false
1954
+ expect(obj2.nest.aliased_datetime.update).to start_with sample_datetime
1955
+ User.reset_class
1956
+ tb.close
1957
+ db.close
1958
+ end
1959
+ it 'test transfer_map with UTF-8 field name and alias' do
1960
+ Transactd::field_value_mode = Transactd::FIELD_VALUE_MODE_VALUE
1961
+ db = Transactd::Database.new()
1962
+ db.open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
1963
+ tb = db.openTable("user")
1964
+ tb.fetchClass = User
1965
+ tb.ctorArgs = ["1", "2", "3"]
1966
+ # without alias
1967
+ User.reset_class
1968
+ User.transfer_map = {
1969
+ 名前: [:nest_name, :name_holder]
1970
+ }
1971
+ tb.seekFirst
1972
+ expect(tb.stat()).to eq 0
1973
+ tb.fetchMode = Transactd::FETCH_RECORD_INTO
1974
+ expect(tb.fetchMode).to eq Transactd::FETCH_RECORD_INTO
1975
+ rec = tb.fields
1976
+ expect(tb.stat()).to eq 0
1977
+ tb.fetchMode = Transactd::FETCH_USR_CLASS
1978
+ expect(tb.fetchMode).to eq Transactd::FETCH_USR_CLASS
1979
+ obj = tb.fields
1980
+ expect(obj.id).to eq 1
1981
+ expect(obj.respond_to?(:"名前")).to be false
1982
+ expect(obj.nest_name.name_holder.名前.nil?).to be false
1983
+ expect(obj.nest_name.name_holder.名前).to eq "1 user"
1984
+ obj.nest_name.name_holder.名前 = "1 ユーザー"
1985
+ rec.set_value_by_object(obj)
1986
+ obj2 = tb.fields
1987
+ expect(obj2.id).to eq 1
1988
+ expect(obj2.respond_to?(:"名前")).to be false
1989
+ expect(obj2.nest_name.name_holder.名前.nil?).to be false
1990
+ expect(obj2.nest_name.name_holder.名前).to eq "1 ユーザー"
1991
+ # with alias
1992
+ tb.setAlias("名前", "name")
1993
+ User.reset_class
1994
+ User.alias_attribute("name", "名前")
1995
+ User.transfer_map = {
1996
+ name: [:nest_name, :name_holder]
1997
+ }
1998
+ tb.seekFirst
1999
+ expect(tb.stat()).to eq 0
2000
+ tb.fetchMode = Transactd::FETCH_RECORD_INTO
2001
+ expect(tb.fetchMode).to eq Transactd::FETCH_RECORD_INTO
2002
+ rec = tb.fields
2003
+ expect(tb.stat()).to eq 0
2004
+ tb.fetchMode = Transactd::FETCH_USR_CLASS
2005
+ expect(tb.fetchMode).to eq Transactd::FETCH_USR_CLASS
2006
+ obj = tb.fields
2007
+ expect(obj.id).to eq 1
2008
+ expect(obj.respond_to?(:name)).to be false
2009
+ expect(obj.respond_to?(:"名前")).to be false
2010
+ expect(obj.nest_name.name_holder.name.nil?).to be false
2011
+ expect(obj.nest_name.name_holder.name).to eq "1 user"
2012
+ obj.nest_name.name_holder.name = "1 ユーザー"
2013
+ rec.set_value_by_object(obj)
2014
+ obj2 = tb.fields
2015
+ expect(obj2.id).to eq 1
2016
+ expect(obj2.respond_to?(:name)).to be false
2017
+ expect(obj2.respond_to?(:"名前")).to be false
2018
+ expect(obj2.nest_name.name_holder.name.nil?).to be false
2019
+ expect(obj2.nest_name.name_holder.name).to eq "1 ユーザー"
2020
+ # to change alias...
2021
+ tb.close
2022
+ tb = db.openTable("user")
2023
+ tb.fetchClass = User
2024
+ tb.ctorArgs = ["1", "2", "3"]
2025
+ # with UTF-8 string alias
2026
+ tb.setAlias("名前", "名前2")
2027
+ User.reset_class
2028
+ User.alias_attribute("名前2", "名前")
2029
+ User.transfer_map = {
2030
+ 名前2: [:nest_name, :name_holder]
2031
+ }
2032
+ tb.seekFirst
2033
+ expect(tb.stat()).to eq 0
2034
+ tb.fetchMode = Transactd::FETCH_RECORD_INTO
2035
+ expect(tb.fetchMode).to eq Transactd::FETCH_RECORD_INTO
2036
+ rec = tb.fields
2037
+ expect(tb.stat()).to eq 0
2038
+ tb.fetchMode = Transactd::FETCH_USR_CLASS
2039
+ expect(tb.fetchMode).to eq Transactd::FETCH_USR_CLASS
2040
+ obj = tb.fields
2041
+ expect(obj.id).to eq 1
2042
+ expect(obj.respond_to?(:"名前2")).to be false
2043
+ expect(obj.respond_to?(:"名前")).to be false
2044
+ expect(obj.nest_name.name_holder.名前2.nil?).to be false
2045
+ expect(obj.nest_name.name_holder.名前2).to eq "1 user"
2046
+ obj.nest_name.name_holder.名前2 = "1 ユーザー"
2047
+ rec.set_value_by_object(obj)
2048
+ obj2 = tb.fields
2049
+ expect(obj2.id).to eq 1
2050
+ expect(obj2.respond_to?(:"名前2")).to be false
2051
+ expect(obj2.respond_to?(:"名前")).to be false
2052
+ expect(obj2.nest_name.name_holder.名前2.nil?).to be false
2053
+ expect(obj2.nest_name.name_holder.名前2).to eq "1 ユーザー"
2054
+ User.reset_class
2055
+ tb.close
2056
+ db.close
2057
+ end
2058
+ it 'insert_object with transfer_map' do
2059
+ db = Transactd::Database.new()
2060
+ db.open(URL, Transactd::TYPE_SCHEMA_BDF, Transactd::TD_OPEN_NORMAL)
2061
+ tb = db.openTable("user")
2062
+ expect(tb.stat()).to eq 0
2063
+ tb.fetchClass = User
2064
+ tb.ctorArgs = ["1", "2", "3"]
2065
+ tb.setAlias("名前", "名前2")
2066
+ tb.setAlias("update_datetime", "update")
2067
+ tb.seekFirst()
2068
+ expect(tb.stat()).to eq 0
2069
+ # use alias and transfer_map
2070
+ tb.fetchMode = Transactd::FETCH_USR_CLASS
2071
+ expect(tb.fetchMode).to eq Transactd::FETCH_USR_CLASS
2072
+ User.reset_class
2073
+ User.alias_attribute("名前2", "名前")
2074
+ User.alias_attribute("update", "update_datetime")
2075
+ User.transfer_map = {
2076
+ 名前2: [:nest_name, :name_holder],
2077
+ update: [:nest, :aliased_datetime],
2078
+ create_datetime: [:nest, :datetime]
2079
+ }
2080
+ usr = tb.fields()
2081
+ expect(usr.respond_to?(:"名前")).to be false
2082
+ expect(usr.respond_to?(:"名前2")).to be false
2083
+ expect(usr.respond_to?(:update_datetime)).to be false
2084
+ expect(usr.respond_to?(:create_datetime)).to be false
2085
+ expect(usr.respond_to?(:update)).to be false
2086
+ expect(usr.respond_to?(:create)).to be false
2087
+ expect(usr.nest_name.name_holder.名前.nil?).to be true
2088
+ expect(usr.nest_name.name_holder.name.nil?).to be true
2089
+ expect(usr.nest_name.name_holder.名前2.nil?).to be false
2090
+ expect(usr.nest.aliased_datetime.update.nil?).to be false
2091
+ expect(usr.nest.aliased_datetime.create.nil?).to be true
2092
+ expect(usr.nest.datetime.update_datetime.nil?).to be true
2093
+ expect(usr.nest.datetime.create_datetime.nil?).to be false
2094
+ usr.id = 0
2095
+ usr.nest_name.name_holder.名前2 = 'test_insert_transfer'
2096
+ usr.nest.aliased_datetime.update = '2016-11-02 12:34:56'
2097
+ tb.insert_by_object(usr)
2098
+ tb.seekLast()
2099
+ usr = tb.fields()
2100
+ expect(usr.nest_name.name_holder.名前2).to eq 'test_insert_transfer'
2101
+ expect(usr.id).to eq 1003
2102
+ row = tb.getRecord()
2103
+ row.set_value_by_object(usr)
2104
+ usr2 = tb.fields()
2105
+ expect(usr2.a).to eq usr.a
2106
+ expect(usr2.b).to eq usr.b
2107
+ expect(usr2.c).to eq usr.c
2108
+ expect(usr2.id).to eq usr.id
2109
+ expect(usr2.nest_name.name_holder.名前2).to eq usr.nest_name.name_holder.名前2
2110
+ expect(usr2.group).to eq usr.group
2111
+ expect(usr2.tel).to eq usr.tel
2112
+ expect(usr2.nest.aliased_datetime.update).to eq usr.nest.aliased_datetime.update
2113
+ expect(usr2.nest.datetime.create_datetime).to start_with usr.nest.datetime.create_datetime
2114
+ tb.close
2115
+ db.close
2116
+ end
936
2117
  end