dmRuby 1.0.5 → 1.0.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 64aabe0fbddebacf24fc7a4822257d952dd44e6c28d231218077a4d8261e0b50
4
- data.tar.gz: 0b5b3bc45b31795d01a59006703e3f6a9c6277730f7bb5eea859e7807ba9baf9
3
+ metadata.gz: 5ada106c9144f36bdc5521d71b7a652da56eca82a611bbc94faa8a0599839428
4
+ data.tar.gz: c45a94facc46e758429db8802c3e2e5dc3d19ba98c993b618b0a4643695b5084
5
5
  SHA512:
6
- metadata.gz: 70e9160a4f618833a593439af92c0f1b8261389f91109472af994ac94e522093ed61e925961d39472e6f0d899edbd6127569bcf3198692351d8b1e11930b814a
7
- data.tar.gz: 5426e757e3aa0380a67a493fd389ab624ffd082d9a58b5d9ce1f90db7d36419b660389835b2fbc2b7d00d2b007afd7f77abe672196bc566abf3bd787e1a6145b
6
+ metadata.gz: 3dee87a46e1e2e4965b0c16b5cd49989e0638a7b7bc972bf82b4032cef72195df7f8254b24df5b117a5fff5c2df23e8e953036299f926c29bb54b2e5db81e16b
7
+ data.tar.gz: c5bc2ffbcb47e0e51d3f3f30df2b9431ccf4aafd3d5b151217a0784eb24f8e5e45cb8ab168c04ea7eecb9395e74cc9f50052cdca41591f22de27e991043ae5ad
data/ChangeLogs.md CHANGED
@@ -8,6 +8,20 @@
8
8
 
9
9
  ## Change Logs
10
10
 
11
+ - dmRuby v1.0.7
12
+
13
+ 1、修改merge语句影响行数错误的问题。
14
+
15
+ - dmRuby v1.0.6
16
+
17
+ 1、修改读取中文数据缺失的问题;
18
+
19
+ 2、修改插入带时区的时间数据没有转换时区的问题;
20
+
21
+ 3、修改插入空数据的问题;
22
+
23
+ 4、修改读取空串的问题;
24
+
11
25
  - dmRuby v1.0.5
12
26
 
13
27
  1、修改读取bit类型结果错误的问题;
data/ext/client.c CHANGED
@@ -342,7 +342,7 @@ static void *nogvl_send_query(void *ptr) {
342
342
  if(nStmtType == DSQL_DIAG_FUNC_CODE_INSERT ||
343
343
  nStmtType == DSQL_DIAG_FUNC_CODE_UPDATE ||
344
344
  nStmtType == DSQL_DIAG_FUNC_CODE_DELETE ||
345
- nStmtType == DSQL_DIAG_FUNC_CODE_CALL)
345
+ nStmtType == DSQL_DIAG_FUNC_CODE_MERGE)
346
346
  {
347
347
  rt = dpi_row_count(hstmt,&args->wrapper->affected_rows);
348
348
  }
data/ext/result.c CHANGED
@@ -111,18 +111,18 @@ static void *nogvl_get_col_desc(void *ptr) {
111
111
  (dpointer)&(wrapper->col_desc[iParam].length), 0, NULL);
112
112
  if(!DSQL_SUCCEEDED(rt))
113
113
  return (void*)Qfalse;
114
- wrapper->result[iParam] = (char*)xmalloc(wrapper->col_desc[iParam].length+2);
114
+ wrapper->result[iParam] = (char*)xmalloc(wrapper->col_desc[iParam].length * 2 + 1);
115
115
  if(wrapper->col_desc[iParam].sql_type == DSQL_BINARY || wrapper->col_desc[iParam].sql_type == DSQL_VARBINARY)
116
116
  {
117
117
  rt = dpi_bind_col(wrapper->statement, (udint2)iParam + 1, DSQL_C_BINARY,
118
118
  (dpointer)wrapper->result[iParam],
119
- wrapper->col_desc[iParam].length + 1, &wrapper->length[iParam]);
119
+ wrapper->col_desc[iParam].length * 2 + 1, &wrapper->length[iParam]);
120
120
  }
121
121
  else
122
122
  {
123
123
  rt = dpi_bind_col(wrapper->statement, (udint2)iParam + 1, DSQL_C_NCHAR,
124
124
  (dpointer)wrapper->result[iParam],
125
- wrapper->col_desc[iParam].length + 1, &wrapper->length[iParam]);
125
+ wrapper->col_desc[iParam].length * 2 + 1, &wrapper->length[iParam]);
126
126
  }
127
127
  }
128
128
  }
@@ -550,7 +550,7 @@ static VALUE rb_dm_result_fetch_row(VALUE self,const result_each_args *args)
550
550
 
551
551
  for (i = 0; i < wrapper->numberOfFields; i++) {
552
552
  VALUE field = rb_dm_result_fetch_field(self, i, args->symbolizeKeys);
553
- if (row[i] && fieldLengths[i]>0) {
553
+ if (row[i] && fieldLengths[i]>=0) {
554
554
  VALUE val = Qnil;
555
555
  sdint2 type = wrapper->col_desc[i].sql_type;
556
556
 
data/ext/statement.c CHANGED
@@ -34,6 +34,7 @@ static size_t rb_dm_stmt_memsize(const void * ptr) {
34
34
  if (w->client_wrapper) {
35
35
  memsize += sizeof(*w->client_wrapper);
36
36
  }
37
+ return memsize;
37
38
  }
38
39
 
39
40
  #ifdef HAVE_RB_GC_MARK_MOVABLE
@@ -323,7 +324,7 @@ static void *nogvl_stmt_execute(void *ptr) {
323
324
  if(nStmtType == DSQL_DIAG_FUNC_CODE_INSERT ||
324
325
  nStmtType == DSQL_DIAG_FUNC_CODE_UPDATE ||
325
326
  nStmtType == DSQL_DIAG_FUNC_CODE_DELETE ||
326
- nStmtType == DSQL_DIAG_FUNC_CODE_CALL)
327
+ nStmtType == DSQL_DIAG_FUNC_CODE_MERGE)
327
328
  {
328
329
  rt = dpi_row_count(stmt_wrapper->stmt,&stmt_wrapper->affected_rows);
329
330
  if (!DSQL_SUCCEEDED(rt)) {
@@ -427,6 +428,7 @@ static VALUE rb_dm_stmt_execute(int argc, VALUE *argv, VALUE self) {
427
428
  rb_encoding *conn_enc;
428
429
  DPIRETURN rt;
429
430
  rb_encoding *enc;
431
+ slength indicator;
430
432
 
431
433
  GET_STATEMENT(self);
432
434
  GET_CLIENT(stmt_wrapper->client);
@@ -461,10 +463,8 @@ static VALUE rb_dm_stmt_execute(int argc, VALUE *argv, VALUE self) {
461
463
 
462
464
  switch (TYPE(argv[i])) {
463
465
  case T_NIL:
464
- bind_buffers[i].buffer = xmalloc(8192);
465
- strncpy(bind_buffers[i].buffer, "", 8192);
466
- bind_buffers[i].buffer_length = 8192;
467
- rt = dpi_bind_param(stmt_wrapper->stmt, i + 1, DSQL_PARAM_INPUT, DSQL_C_NCHAR, stmt_wrapper->paramdesc[i].sql_type, stmt_wrapper->paramdesc[i].prec, stmt_wrapper->paramdesc[i].scale, bind_buffers[i].buffer, bind_buffers[i].buffer_length, NULL);
466
+ indicator = DSQL_NULL_DATA;
467
+ rt = dpi_bind_param(stmt_wrapper->stmt, i + 1, DSQL_PARAM_INPUT, DSQL_C_NCHAR, stmt_wrapper->paramdesc[i].sql_type, stmt_wrapper->paramdesc[i].prec, stmt_wrapper->paramdesc[i].scale, NULL, 0, &indicator);
468
468
  if(!DSQL_SUCCEEDED(rt))
469
469
  rb_raise(cdmError, "failed to bind param %d , code = %d", i, rt, stmt_wrapper, stmt_wrapper->stmt, *(udint8*)stmt_wrapper->stmt);
470
470
  break;
@@ -548,44 +548,13 @@ static VALUE rb_dm_stmt_execute(int argc, VALUE *argv, VALUE self) {
548
548
  break;
549
549
  default:
550
550
  // TODO: what Ruby type should support dm_TYPE_TIME
551
- if (CLASS_OF(argv[i]) == rb_cTime || CLASS_OF(argv[i]) == cDateTime) {
552
- dpi_timestamp_t t;
553
- VALUE rb_time = argv[i];
554
-
555
- bind_buffers[i].buffer = xmalloc(sizeof(dpi_timestamp_t));
556
-
557
- memset(&t, 0, sizeof(dpi_timestamp_t));
558
-
559
- if (CLASS_OF(argv[i]) == rb_cTime) {
560
- t.fraction = FIX2INT(rb_funcall(rb_time, intern_usec, 0));
561
- } else if (CLASS_OF(argv[i]) == cDateTime) {
562
- t.fraction = NUM2DBL(rb_funcall(rb_time, intern_sec_fraction, 0)) * 1000000;
563
- }
551
+ if (CLASS_OF(argv[i]) == rb_cTime || CLASS_OF(argv[i]) == cDateTime || CLASS_OF(argv[i]) == cDate) {
552
+ VALUE rb_val_as_string = rb_funcall(argv[i], intern_to_s, 0);
564
553
 
565
- t.second = FIX2INT(rb_funcall(rb_time, intern_sec, 0));
566
- t.minute = FIX2INT(rb_funcall(rb_time, intern_min, 0));
567
- t.hour = FIX2INT(rb_funcall(rb_time, intern_hour, 0));
568
- t.day = FIX2INT(rb_funcall(rb_time, intern_day, 0));
569
- t.month = FIX2INT(rb_funcall(rb_time, intern_month, 0));
570
- t.year = FIX2INT(rb_funcall(rb_time, intern_year, 0));
571
-
572
- *(dpi_timestamp_t*)(bind_buffers[i].buffer) = t;
573
- bind_buffers[i].buffer_length = sizeof(dpi_timestamp_t);
574
- rt = dpi_bind_param(stmt_wrapper->stmt, i + 1, DSQL_PARAM_INPUT, DSQL_C_TIMESTAMP, stmt_wrapper->paramdesc[i].sql_type, stmt_wrapper->paramdesc[i].prec, stmt_wrapper->paramdesc[i].scale, bind_buffers[i].buffer, bind_buffers[i].buffer_length, &(bind_buffers[i].buffer_length));
575
- } else if (CLASS_OF(argv[i]) == cDate) {
576
- dpi_date_t t;
577
- VALUE rb_time = argv[i];
578
-
579
- bind_buffers[i].buffer = xmalloc(sizeof(dpi_date_t));
580
-
581
- memset(&t, 0, sizeof(dpi_date_t));
582
- t.day = FIX2INT(rb_funcall(rb_time, intern_day, 0));
583
- t.month = FIX2INT(rb_funcall(rb_time, intern_month, 0));
584
- t.year = FIX2INT(rb_funcall(rb_time, intern_year, 0));
585
-
586
- *(dpi_date_t*)(bind_buffers[i].buffer) = t;
587
- bind_buffers[i].buffer_length = sizeof(dpi_date_t);
588
- rt = dpi_bind_param(stmt_wrapper->stmt, i + 1, DSQL_PARAM_INPUT, DSQL_C_DATE, stmt_wrapper->paramdesc[i].sql_type, stmt_wrapper->paramdesc[i].prec, stmt_wrapper->paramdesc[i].scale, bind_buffers[i].buffer, bind_buffers[i].buffer_length, &(bind_buffers[i].buffer_length));
554
+ params_enc[i] = rb_val_as_string;
555
+ params_enc[i] = rb_str_export_to_enc(params_enc[i], conn_enc);
556
+ set_buffer_for_string(&bind_buffers[i], &length_buffers[i], params_enc[i]);
557
+ rt = dpi_bind_param(stmt_wrapper->stmt, i + 1, DSQL_PARAM_INPUT, DSQL_C_NCHAR, stmt_wrapper->paramdesc[i].sql_type, stmt_wrapper->paramdesc[i].prec, stmt_wrapper->paramdesc[i].scale, bind_buffers[i].buffer, bind_buffers[i].buffer_length, &(bind_buffers[i].buffer_length));
589
558
  } else if (CLASS_OF(argv[i]) == cBigDecimal) {
590
559
  VALUE rb_val_as_string = rb_funcall(argv[i], intern_to_s, 0);
591
560
 
data/lib/dm/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dm
4
- VERSION = "1.0.5"
4
+ VERSION = "1.0.7"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dmRuby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - sunbiao
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-11-18 00:00:00.000000000 Z
11
+ date: 2025-12-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bigdecimal
@@ -39,7 +39,6 @@ files:
39
39
  - "./README.md"
40
40
  - "./Rakefile"
41
41
  - "./dm.gemspec"
42
- - "./dmRuby-1.0.5.gem"
43
42
  - ext/client.c
44
43
  - ext/client.h
45
44
  - ext/dm_enc_name_to_ruby.h
data/dmRuby-1.0.5.gem DELETED
Binary file