dmRuby 1.0.5 → 1.0.6

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: 16c17975a7c35617e5a27459e3f4bff7070a7bfac2d788019c2e9d999ec15ed2
4
+ data.tar.gz: 13be646ef94149926f1adc7bc539a013603dcadf9aaeafe53b1da87a64b732c0
5
5
  SHA512:
6
- metadata.gz: 70e9160a4f618833a593439af92c0f1b8261389f91109472af994ac94e522093ed61e925961d39472e6f0d899edbd6127569bcf3198692351d8b1e11930b814a
7
- data.tar.gz: 5426e757e3aa0380a67a493fd389ab624ffd082d9a58b5d9ce1f90db7d36419b660389835b2fbc2b7d00d2b007afd7f77abe672196bc566abf3bd787e1a6145b
6
+ metadata.gz: 8600e17b7285807a567cfacc749b9645428626eec4f3301442a1d2c2a94728e93b01ed4572039e68351252b26bda50c3d512c67f40b30ee849e1a821a125cc21
7
+ data.tar.gz: 70fb7211153bc57809bc82b86aa80bd0e578b208b3f7b0a1ba11590e53b69c9c835d14cde417d18b68bfb2433d670b1f07c8d9437015fe11b65962c19811d0b3
data/ChangeLogs.md CHANGED
@@ -8,6 +8,16 @@
8
8
 
9
9
  ## Change Logs
10
10
 
11
+ - dmRuby v1.0.6
12
+
13
+ 1、修改读取中文数据缺失的问题;
14
+
15
+ 2、修改插入带时区的时间数据没有转换时区的问题;
16
+
17
+ 3、修改插入空数据的问题;
18
+
19
+ 4、修改读取空串的问题;
20
+
11
21
  - dmRuby v1.0.5
12
22
 
13
23
  1、修改读取bit类型结果错误的问题;
data/dmRuby-1.0.6.gem ADDED
Binary file
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
@@ -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.6"
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.6
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-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bigdecimal
@@ -39,7 +39,7 @@ files:
39
39
  - "./README.md"
40
40
  - "./Rakefile"
41
41
  - "./dm.gemspec"
42
- - "./dmRuby-1.0.5.gem"
42
+ - "./dmRuby-1.0.6.gem"
43
43
  - ext/client.c
44
44
  - ext/client.h
45
45
  - ext/dm_enc_name_to_ruby.h
data/dmRuby-1.0.5.gem DELETED
Binary file