@@ -423,3 +423,71 @@ func (s *clientTestSuite) TestStmt_Trans() {
423
423
str , _ = r .GetString (0 , 0 )
424
424
require .Equal (s .T (), `abc` , str )
425
425
}
426
+
427
+ func (s * clientTestSuite ) TestFieldValueString () {
428
+ _ , err := s .c .Execute (
429
+ `
430
+ CREATE TABLE field_value_test (
431
+ c_int int,
432
+ c_bit bit(8),
433
+ c_tinyint_u tinyint unsigned,
434
+ c_decimal decimal(10, 5),
435
+ c_float float(10),
436
+ c_date date,
437
+ c_datetime datetime(3),
438
+ c_timestamp timestamp(4),
439
+ c_time time(5),
440
+ c_year year,
441
+ c_char char(10),
442
+ c_varchar varchar(10),
443
+ c_binary binary(10),
444
+ c_varbinary varbinary(10),
445
+ c_blob blob,
446
+ c_enum enum('a', 'b', 'c'),
447
+ c_set set('a', 'b', 'c'),
448
+ c_json json,
449
+ c_null int
450
+ )` )
451
+ require .NoError (s .T (), err )
452
+ s .T ().Cleanup (func () {
453
+ _ , _ = s .c .Execute (
454
+ `DROP TABLE field_value_test` )
455
+ })
456
+
457
+ _ , err = s .c .Execute (`
458
+ INSERT INTO field_value_test VALUES (
459
+ 1, 2, 3, 4.5, 6.7,
460
+ '2019-01-01', '2019-01-01 01:01:01.123', '2019-01-01 01:01:01.1234', '01:01:01.12345', 2019,
461
+ 'cha\'r', 'varchar', 'binary', 'varbinary', 'blob', 'a', 'a,b', '{"a": 1}',
462
+ NULL
463
+ )` )
464
+ require .NoError (s .T (), err )
465
+
466
+ result , err := s .c .Execute (`SELECT * FROM field_value_test` )
467
+ require .NoError (s .T (), err )
468
+ require .Len (s .T (), result .Values , 1 )
469
+ expected := []string {
470
+ `1` , "'\x02 '" , `3` , `'4.50000'` , `6.7` ,
471
+ `'2019-01-01'` , `'2019-01-01 01:01:01.123'` , `'2019-01-01 01:01:01.1234'` , `'01:01:01.12345'` , `2019` ,
472
+ `'cha\'r'` , `'varchar'` , "'binary\x00 \x00 \x00 \x00 '" , `'varbinary'` , `'blob'` , `'a'` , `'a,b'` , `'{"a": 1}'` ,
473
+ `NULL` ,
474
+ }
475
+ for i , v := range result .Values [0 ] {
476
+ require .Equal (s .T (), expected [i ], v .String ())
477
+ }
478
+
479
+ // test can directly use to build a SQL, though it's not safe in most cases
480
+ sql := fmt .Sprintf ("INSERT INTO field_value_test VALUES (%s)" , strings .Join (expected , "," ))
481
+ _ , err = s .c .Execute (sql )
482
+ require .NoError (s .T (), err )
483
+ result , err = s .c .Execute (`SELECT * FROM field_value_test` )
484
+ require .NoError (s .T (), err )
485
+ // check again, everything is same
486
+ require .Len (s .T (), result .Values , 2 )
487
+ for i , v := range result .Values [0 ] {
488
+ require .Equal (s .T (), expected [i ], v .String ())
489
+ }
490
+ for i , v := range result .Values [1 ] {
491
+ require .Equal (s .T (), expected [i ], v .String ())
492
+ }
493
+ }
0 commit comments