@@ -633,6 +633,153 @@ var VariableQueries = []ScriptTest{
633
633
},
634
634
},
635
635
},
636
+ {
637
+ Name : "mysql_string_to_number system variable" ,
638
+ Assertions : []ScriptTestAssertion {
639
+ {
640
+ Query : "SELECT @@mysql_string_to_number" ,
641
+ Expected : []sql.Row {{int8 (0 )}},
642
+ },
643
+ {
644
+ Query : "SET @@mysql_string_to_number = 1" ,
645
+ Expected : []sql.Row {{types .NewOkResult (0 )}},
646
+ },
647
+ {
648
+ Query : "SELECT @@mysql_string_to_number" ,
649
+ Expected : []sql.Row {{int8 (1 )}},
650
+ },
651
+ {
652
+ Query : "SET @@mysql_string_to_number = 0" ,
653
+ Expected : []sql.Row {{types .NewOkResult (0 )}},
654
+ },
655
+ {
656
+ Query : "SELECT @@mysql_string_to_number" ,
657
+ Expected : []sql.Row {{int8 (0 )}},
658
+ },
659
+ {
660
+ Query : "SET @@session.mysql_string_to_number = 1" ,
661
+ Expected : []sql.Row {{types .NewOkResult (0 )}},
662
+ },
663
+ {
664
+ Query : "SELECT @@session.mysql_string_to_number" ,
665
+ Expected : []sql.Row {{int8 (1 )}},
666
+ },
667
+ {
668
+ Query : "SET @@global.mysql_string_to_number = 0" ,
669
+ Expected : []sql.Row {{types .NewOkResult (0 )}},
670
+ },
671
+ {
672
+ Query : "SELECT @@global.mysql_string_to_number" ,
673
+ Expected : []sql.Row {{int8 (0 )}},
674
+ },
675
+ },
676
+ },
677
+ {
678
+ Name : "mysql_string_to_number conversion behavior" ,
679
+ SetUpScript : []string {
680
+ "CREATE TABLE test_table (id INT PRIMARY KEY, int_col INT, float_col FLOAT)" ,
681
+ "INSERT INTO test_table VALUES (1, 10, 10.5)" ,
682
+ },
683
+ Assertions : []ScriptTestAssertion {
684
+ // Variable disabled - original behavior
685
+ {
686
+ Query : "SET @@mysql_string_to_number = 0" ,
687
+ Expected : []sql.Row {{types .NewOkResult (0 )}},
688
+ },
689
+ {
690
+ Query : "SELECT CAST('123abc' AS SIGNED)" ,
691
+ Expected : []sql.Row {{int64 (0 )}},
692
+ },
693
+ {
694
+ Query : "SELECT CAST('_123_' AS SIGNED)" ,
695
+ Expected : []sql.Row {{int64 (0 )}},
696
+ },
697
+ {
698
+ Query : "SELECT CAST('abc123' AS SIGNED)" ,
699
+ Expected : []sql.Row {{int64 (0 )}},
700
+ },
701
+ // Variable enabled - extract numeric prefixes
702
+ {
703
+ Query : "SET @@mysql_string_to_number = 1" ,
704
+ Expected : []sql.Row {{types .NewOkResult (0 )}},
705
+ },
706
+ {
707
+ Query : "SELECT CAST('123abc' AS SIGNED)" ,
708
+ Expected : []sql.Row {{int64 (123 )}},
709
+ },
710
+ {
711
+ Query : "SELECT CAST('_123_' AS SIGNED)" ,
712
+ Expected : []sql.Row {{int64 (0 )}},
713
+ },
714
+ {
715
+ Query : "SELECT CAST('123_' AS SIGNED)" ,
716
+ Expected : []sql.Row {{int64 (123 )}},
717
+ },
718
+ {
719
+ Query : "SELECT CAST('abc123' AS SIGNED)" ,
720
+ Expected : []sql.Row {{int64 (0 )}},
721
+ },
722
+ {
723
+ Query : "SELECT CAST(' 123 ' AS SIGNED)" ,
724
+ Expected : []sql.Row {{int64 (123 )}},
725
+ },
726
+ {
727
+ Query : "SELECT CAST(' +45.67e2' AS SIGNED)" ,
728
+ Expected : []sql.Row {{int64 (45 )}},
729
+ },
730
+ {
731
+ Query : "SELECT CAST('-789.123' AS SIGNED)" ,
732
+ Expected : []sql.Row {{int64 (- 789 )}},
733
+ },
734
+ {
735
+ Query : "SELECT CAST('123%' AS SIGNED)" ,
736
+ Expected : []sql.Row {{int64 (123 )}},
737
+ },
738
+ {
739
+ Query : "SELECT CAST('#123' AS SIGNED)" ,
740
+ Expected : []sql.Row {{int64 (0 )}},
741
+ },
742
+ {
743
+ Query : "SELECT CAST('123.456' AS SIGNED)" ,
744
+ Expected : []sql.Row {{int64 (123 )}},
745
+ },
746
+ // Test decimal conversions
747
+ {
748
+ Query : "SELECT CAST('123.456abc' AS DECIMAL(10,3))" ,
749
+ Expected : []sql.Row {{"123.456" }},
750
+ },
751
+ {
752
+ Query : "SELECT CAST('_123.456_' AS DECIMAL(10,3))" ,
753
+ Expected : []sql.Row {{"0.000" }},
754
+ },
755
+ {
756
+ Query : "SELECT CAST('45.67e2' AS DECIMAL(10,2))" ,
757
+ Expected : []sql.Row {{"4567.00" }},
758
+ },
759
+ // Test unsigned type handling
760
+ {
761
+ Query : "SELECT CAST('123abc' AS UNSIGNED)" ,
762
+ Expected : []sql.Row {{uint64 (123 )}},
763
+ },
764
+ {
765
+ Query : "SELECT CAST('-123abc' AS UNSIGNED)" ,
766
+ Expected : []sql.Row {{uint64 (18446744073709551493 )}},
767
+ },
768
+ // Test comparison operations from issue #7128
769
+ {
770
+ Query : "SELECT * FROM test_table WHERE int_col = '10abc'" ,
771
+ Expected : []sql.Row {{1 , 10 , float32 (10.5 )}},
772
+ },
773
+ {
774
+ Query : "SELECT * FROM test_table WHERE float_col = '10.5xyz'" ,
775
+ Expected : []sql.Row {{1 , 10 , float32 (10.5 )}},
776
+ },
777
+ {
778
+ Query : "SELECT * FROM test_table WHERE int_col = '_10_'" ,
779
+ Expected : []sql.Row {},
780
+ },
781
+ },
782
+ },
636
783
//TODO: do not override tables with user-var-like names...but why would you do this??
637
784
//{
638
785
// Name: "user var table name no conflict",
0 commit comments