@@ -423,3 +423,71 @@ func (s *clientTestSuite) TestStmt_Trans() {
423423str , _  =  r .GetString (0 , 0 )
424424require .Equal (s .T (), `abc` , str )
425425}
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