@@ -408,6 +408,82 @@ def test_1_named_oracle_2_to_qmark_3_many_mixed(self):
408
408
self .assertEqual (sql , dest_sql )
409
409
self .assertEqual (many_params , dest_params )
410
410
411
+ def test_1_named_sqlserver_to_qmark (self ):
412
+ """
413
+ Test converting from::
414
+
415
+ ... WHERE name = @name
416
+
417
+ to::
418
+
419
+ ... WHERE name = ?
420
+ """
421
+ # Create instance.
422
+ query = sqlparams .SQLParams ('named_sqlserver' , 'qmark' )
423
+
424
+ # Source SQL and params.
425
+ src_sql = """
426
+ SELECT *
427
+ FROM users
428
+ WHERE name = @name OR id = @id;
429
+ """
430
+ src_params = {'id' : 5 , 'name' : "Dori" }
431
+
432
+ # Desired SQL and params.
433
+ dest_sql = """
434
+ SELECT *
435
+ FROM users
436
+ WHERE name = ? OR id = ?;
437
+ """
438
+ dest_params = [src_params ['name' ], src_params ['id' ]]
439
+
440
+ # Format SQL with params.
441
+ sql , params = query .format (src_sql , src_params )
442
+
443
+ # Make sure desired SQL and parameters are created.
444
+ self .assertEqual (sql , dest_sql )
445
+ self .assertEqual (params , dest_params )
446
+
447
+ def test_1_named_sqlserver_to_qmark_many (self ):
448
+ """
449
+ Test converting from::
450
+
451
+ ... WHERE name = @name
452
+
453
+ to::
454
+
455
+ ... WHERE name = ?
456
+ """
457
+ # Create instance.
458
+ query = sqlparams .SQLParams ('named_sqlserver' , 'qmark' )
459
+
460
+ # Source SQL and params.
461
+ src_sql = """
462
+ SELECT *
463
+ FROM users
464
+ WHERE name = @name OR id = @id;
465
+ """
466
+ src_params = [
467
+ {'id' : 7 , 'name' : "Ori" },
468
+ {'id' : 5 , 'name' : "Dori" },
469
+ {'id' : 10 , 'name' : "Bifur" },
470
+ ]
471
+
472
+ # Desired SQL and params.
473
+ dest_sql = """
474
+ SELECT *
475
+ FROM users
476
+ WHERE name = ? OR id = ?;
477
+ """
478
+ dest_params = [[__row ['name' ], __row ['id' ]] for __row in src_params ]
479
+
480
+ # Format SQL with params.
481
+ sql , many_params = query .formatmany (src_sql , src_params )
482
+
483
+ # Make sure desired SQL and parameters are created.
484
+ self .assertEqual (sql , dest_sql )
485
+ self .assertEqual (many_params , dest_params )
486
+
411
487
def test_1_pyformat_to_format (self ):
412
488
"""
413
489
Test converting from::
@@ -880,18 +956,18 @@ def test_4_named_escape_char_disabled(self):
880
956
self .assertEqual (sql , dest_sql )
881
957
self .assertEqual (params , dest_params )
882
958
883
- def test_4_pyformat_escape_char (self ):
959
+ def test_4_named_sqlserver_escape_char (self ):
884
960
"""
885
- Test escaping a pyformat parameter.
961
+ Test escaping a named sqlserver parameter.
886
962
"""
887
963
# Create instance.
888
- query = sqlparams .SQLParams ('pyformat ' , 'qmark' , escape_char = True )
964
+ query = sqlparams .SQLParams ('named_sqlserver ' , 'qmark' , escape_char = True )
889
965
890
966
# Source SQL and params.
891
967
src_sql = """
892
968
SELECT *
893
969
FROM users
894
- WHERE name = %( name)s AND tag IN ('%%( Y2941)s ', '%%( 2941)s ');
970
+ WHERE name = @ name AND tag IN ('@@ Y2941', '@@ 2941');
895
971
"""
896
972
name = "Bilbo"
897
973
src_params = {'name' : name }
@@ -900,7 +976,7 @@ def test_4_pyformat_escape_char(self):
900
976
dest_sql = """
901
977
SELECT *
902
978
FROM users
903
- WHERE name = ? AND tag IN ('%( Y2941)s ', '%( 2941)s ');
979
+ WHERE name = ? AND tag IN ('@ Y2941', '@ 2941');
904
980
"""
905
981
dest_params = [name ]
906
982
@@ -911,18 +987,18 @@ def test_4_pyformat_escape_char(self):
911
987
self .assertEqual (sql , dest_sql )
912
988
self .assertEqual (params , dest_params )
913
989
914
- def test_4_pyformat_escape_char_disabled (self ):
990
+ def test_4_named_sqlserver_escape_char_disabled (self ):
915
991
"""
916
- Test disabling escaping of a pyformat parameter.
992
+ Test disabling escaping of a named sqlserver parameter.
917
993
"""
918
994
# Create instance.
919
- query = sqlparams .SQLParams ('pyformat ' , 'qmark' , escape_char = False )
995
+ query = sqlparams .SQLParams ('named_sqlserver ' , 'qmark' , escape_char = False )
920
996
921
997
# Source SQL and params.
922
998
src_sql = """
923
999
SELECT *
924
1000
FROM users
925
- WHERE name = %( name)s AND tag IN ('%%( Y2941)s ', '%( 2941)s ');
1001
+ WHERE name = @ name AND tag IN ('@@ Y2941', '@ 2941');
926
1002
"""
927
1003
name = "Bilbo"
928
1004
src_params = {'name' : name }
@@ -931,7 +1007,7 @@ def test_4_pyformat_escape_char_disabled(self):
931
1007
dest_sql = """
932
1008
SELECT *
933
1009
FROM users
934
- WHERE name = ? AND tag IN ('%%( Y2941)s ', '%( 2941)s ');
1010
+ WHERE name = ? AND tag IN ('@@ Y2941', '@ 2941');
935
1011
"""
936
1012
dest_params = [name ]
937
1013
@@ -942,31 +1018,29 @@ def test_4_pyformat_escape_char_disabled(self):
942
1018
self .assertEqual (sql , dest_sql )
943
1019
self .assertEqual (params , dest_params )
944
1020
945
- def test_5_named_to_format_escaped_percent (self ):
1021
+ def test_4_pyformat_escape_char (self ):
946
1022
"""
947
- Test converting from::
948
-
949
- SELECT 5 % :value
950
-
951
- to::
952
-
953
- SELECT 5 %% %s
1023
+ Test escaping a pyformat parameter.
954
1024
"""
955
1025
# Create instance.
956
- query = sqlparams .SQLParams ('named ' , 'format' )
1026
+ query = sqlparams .SQLParams ('pyformat ' , 'qmark' , escape_char = True )
957
1027
958
1028
# Source SQL and params.
959
1029
src_sql = """
960
- SELECT 5 % :value;
1030
+ SELECT *
1031
+ FROM users
1032
+ WHERE name = %(name)s AND tag IN ('%%(Y2941)s', '%%(2941)s');
961
1033
"""
962
- value = 2
963
- src_params = {'value ' : value }
1034
+ name = "Bilbo"
1035
+ src_params = {'name ' : name }
964
1036
965
1037
# Desired SQL and params.
966
1038
dest_sql = """
967
- SELECT 5 %% %s;
1039
+ SELECT *
1040
+ FROM users
1041
+ WHERE name = ? AND tag IN ('%(Y2941)s', '%(2941)s');
968
1042
"""
969
- dest_params = [value ]
1043
+ dest_params = [name ]
970
1044
971
1045
# Format SQL with params.
972
1046
sql , params = query .format (src_sql , src_params )
@@ -975,31 +1049,29 @@ def test_5_named_to_format_escaped_percent(self):
975
1049
self .assertEqual (sql , dest_sql )
976
1050
self .assertEqual (params , dest_params )
977
1051
978
- def test_5_named_to_qmark_unescaped_percent (self ):
1052
+ def test_4_pyformat_escape_char_disabled (self ):
979
1053
"""
980
- Test converting from::
981
-
982
- SELECT 5 % :value
983
-
984
- to::
985
-
986
- SELECT 5 % ?
1054
+ Test disabling escaping of a pyformat parameter.
987
1055
"""
988
1056
# Create instance.
989
- query = sqlparams .SQLParams ('named ' , 'qmark' )
1057
+ query = sqlparams .SQLParams ('pyformat ' , 'qmark' , escape_char = False )
990
1058
991
1059
# Source SQL and params.
992
1060
src_sql = """
993
- SELECT 5 % :value;
1061
+ SELECT *
1062
+ FROM users
1063
+ WHERE name = %(name)s AND tag IN ('%%(Y2941)s', '%(2941)s');
994
1064
"""
995
- value = 2
996
- src_params = {'value ' : value }
1065
+ name = "Bilbo"
1066
+ src_params = {'name ' : name }
997
1067
998
1068
# Desired SQL and params.
999
1069
dest_sql = """
1000
- SELECT 5 % ?;
1070
+ SELECT *
1071
+ FROM users
1072
+ WHERE name = ? AND tag IN ('%%(Y2941)s', '%(2941)s');
1001
1073
"""
1002
- dest_params = [value ]
1074
+ dest_params = [name ]
1003
1075
1004
1076
# Format SQL with params.
1005
1077
sql , params = query .format (src_sql , src_params )
@@ -1008,22 +1080,22 @@ def test_5_named_to_qmark_unescaped_percent(self):
1008
1080
self .assertEqual (sql , dest_sql )
1009
1081
self .assertEqual (params , dest_params )
1010
1082
1011
- def test_5_named_dollar_to_format_escaped_percent (self ):
1083
+ def test_5_named_to_format_escaped_percent (self ):
1012
1084
"""
1013
1085
Test converting from::
1014
1086
1015
- SELECT 5 % $ value
1087
+ SELECT 5 % : value
1016
1088
1017
1089
to::
1018
1090
1019
1091
SELECT 5 %% %s
1020
1092
"""
1021
1093
# Create instance.
1022
- query = sqlparams .SQLParams ('named_dollar ' , 'format' )
1094
+ query = sqlparams .SQLParams ('named ' , 'format' )
1023
1095
1024
1096
# Source SQL and params.
1025
1097
src_sql = """
1026
- SELECT 5 % $ value;
1098
+ SELECT 5 % : value;
1027
1099
"""
1028
1100
value = 2
1029
1101
src_params = {'value' : value }
@@ -1041,22 +1113,22 @@ def test_5_named_dollar_to_format_escaped_percent(self):
1041
1113
self .assertEqual (sql , dest_sql )
1042
1114
self .assertEqual (params , dest_params )
1043
1115
1044
- def test_5_named_dollar_to_qmark_unescaped_percent (self ):
1116
+ def test_5_named_to_qmark_unescaped_percent (self ):
1045
1117
"""
1046
1118
Test converting from::
1047
1119
1048
- SELECT 5 % $ value
1120
+ SELECT 5 % : value
1049
1121
1050
1122
to::
1051
1123
1052
1124
SELECT 5 % ?
1053
1125
"""
1054
1126
# Create instance.
1055
- query = sqlparams .SQLParams ('named_dollar ' , 'qmark' )
1127
+ query = sqlparams .SQLParams ('named ' , 'qmark' )
1056
1128
1057
1129
# Source SQL and params.
1058
1130
src_sql = """
1059
- SELECT 5 % $ value;
1131
+ SELECT 5 % : value;
1060
1132
"""
1061
1133
value = 2
1062
1134
src_params = {'value' : value }
0 commit comments