@@ -12,199 +12,143 @@ namespace ServiceStack.OrmLite.SqlServerTests.Expressions
12
12
{
13
13
public class JsonExpressionsTest : OrmLiteTestBase
14
14
{
15
- [ OneTimeSetUp ]
15
+ public static Address Addr { get ; set ; }
16
+ = new Address
17
+ {
18
+ Line1 = "1234 Main Street" ,
19
+ Line2 = "Apt. 404" ,
20
+ City = "Las Vegas" ,
21
+ State = "NV"
22
+ } ;
23
+
24
+ [ OneTimeSetUp ]
16
25
public override void TestFixtureSetUp ( )
17
26
{
18
27
LogManager . LogFactory = new ConsoleLogFactory ( ) ;
19
28
20
29
OrmLiteConfig . DialectProvider = SqlServer2016Dialect . Provider ;
21
- OrmLiteConfig . DialectProvider . RegisterConverter < Address > ( new SqlServerJsonToObjectConverter ( ) ) ;
30
+ OrmLiteConfig . DialectProvider . RegisterConverter < string > ( new SqlServerJsonStringConverter ( ) ) ;
31
+ OrmLiteConfig . DialectProvider . RegisterConverter < Address > ( new SqlServerJsonStringConverter ( ) ) ;
22
32
23
33
ConnectionString = ConfigurationManager . ConnectionStrings [ "testDb" ] . ConnectionString ;
24
- }
25
34
35
+ Db = OpenDbConnection ( ) ;
26
36
27
- [ Test ]
28
- public void Can_test_if_string_field_contains_json ( )
37
+ // Load test data
38
+ Db . DropAndCreateTable < TestType > ( ) ;
39
+ Db . Insert ( new TestType { Id = 1 , StringColumn = "not json" } ) ;
40
+ Db . Insert ( new TestType { Id = 2 , StringColumn = Addr . ToJson ( ) } ) ;
41
+ }
42
+
43
+ [ OneTimeTearDown ]
44
+ public void TextFixtureTearDown ( )
29
45
{
30
- using ( var db = OpenDbConnection ( ) )
46
+ if ( Db != null )
31
47
{
32
- db . DropAndCreateTable < TestType > ( ) ;
48
+ if ( Db . State == System . Data . ConnectionState . Open )
49
+ Db . Close ( ) ;
33
50
34
- // test if string field is not JSON with Sql.IsJson
35
- db . Insert ( new TestType { Id = 1 , StringColumn = "not json" } ) ;
36
-
37
- var j = db . From < TestType > ( )
38
- . Select ( x => Sql . IsJson ( x . StringColumn ) )
39
- . Where ( x => x . Id == 1 ) ;
40
- var isJson = db . Scalar < bool > ( j ) ;
51
+ Db . Dispose ( ) ;
52
+ }
53
+ }
41
54
42
- Assert . IsFalse ( isJson ) ;
43
55
44
- // test if string field is JSON with Sql.IsJson
45
- var expected = new Address
46
- {
47
- Line1 = "1234 Main Street" ,
48
- Line2 = "Apt. 404" ,
49
- City = "Las Vegas" ,
50
- State = "NV"
51
- } ;
52
- var obj = new { Address = expected } ;
53
-
54
- //{ "Address": { "Line1": "1234 Main Street", "Line2": "Apt. 404", "City": "Las Vegas", "State": "NV" } }
55
- var stringValue = obj . ToJson ( ) ;
56
+ [ Test ]
57
+ public void Can_test_if_string_field_contains_json ( )
58
+ {
59
+ // test if string field is not JSON with Sql.IsJson
60
+ var j = Db . From < TestType > ( )
61
+ . Select ( x => Sql . IsJson ( x . StringColumn ) )
62
+ . Where ( x => x . Id == 1 ) ;
63
+ var isJson = Db . Scalar < bool > ( j ) ;
56
64
57
- db . Insert ( new TestType { Id = 2 , StringColumn = stringValue } ) ;
65
+ Assert . IsFalse ( isJson ) ;
58
66
59
- j = db . From < TestType > ( )
60
- . Select ( x => Sql . IsJson ( x . StringColumn ) )
61
- . Where ( x => x . Id == 2 ) ;
62
- isJson = db . Scalar < bool > ( j ) ;
67
+ // test if string field is JSON with Sql.IsJson
68
+ j = Db . From < TestType > ( )
69
+ . Select ( x => Sql . IsJson ( x . StringColumn ) )
70
+ . Where ( x => x . Id == 2 ) ;
71
+ isJson = Db . Scalar < bool > ( j ) ;
63
72
64
- Assert . IsTrue ( isJson ) ;
65
- }
73
+ Assert . IsTrue ( isJson ) ;
66
74
}
67
75
68
76
[ Test ]
69
77
public void Can_select_using_a_json_scalar_filter ( )
70
78
{
71
- using ( var db = OpenDbConnection ( ) )
72
- {
73
- db . DropAndCreateTable < TestType > ( ) ;
74
-
75
- var obj = new
76
- {
77
- Address = new Address
78
- {
79
- Line1 = "1234 Main Street" ,
80
- Line2 = "Apt. 404" ,
81
- City = "Las Vegas" ,
82
- State = "NV"
83
- }
84
- } ;
85
-
86
- //{ "Address": { "Line1": "1234 Main Street", "Line2": "Apt. 404", "City": "Las Vegas", "State": "NV" } }
87
- var stringValue = obj . ToJson ( ) ;
88
-
89
- db . Insert ( new TestType { StringColumn = stringValue } ) ;
90
-
91
- // retrieve records where City in Address is NV (1 record)
92
- var actual = db . Select < TestType > ( q =>
93
- Sql . JsonValue ( q . StringColumn , "$.Address.State" ) == "NV" ) ;
79
+ // retrieve records where City in Address is NV (1 record)
80
+ var actual = Db . Select < TestType > ( q =>
81
+ Sql . JsonValue ( q . StringColumn , "$.State" ) == "NV"
82
+ && q . Id == 2
83
+ ) ;
94
84
95
- Assert . IsNotEmpty ( actual ) ;
85
+ Assert . IsNotEmpty ( actual ) ;
96
86
97
- // retrieve records where City in Address is FL (0 records)
98
- actual = db . Select < TestType > ( q =>
99
- Sql . JsonValue ( q . StringColumn , "$.Address.State" ) == "FL" ) ;
87
+ // retrieve records where City in Address is FL (0 records)
88
+ actual = Db . Select < TestType > ( q =>
89
+ Sql . JsonValue ( q . StringColumn , "$.State" ) == "FL"
90
+ && q . Id == 2
91
+ ) ;
100
92
101
- Assert . IsEmpty ( actual ) ;
102
- }
93
+ Assert . IsEmpty ( actual ) ;
103
94
}
104
95
105
96
[ Test ]
106
97
public void Can_select_a_json_scalar_value ( )
107
98
{
108
- using ( var db = OpenDbConnection ( ) )
109
- {
110
- db . DropAndCreateTable < TestType > ( ) ;
111
-
112
- var obj = new
113
- {
114
- Address = new Address
115
- {
116
- Line1 = "1234 Main Street" ,
117
- Line2 = "Apt. 404" ,
118
- City = "Las Vegas" ,
119
- State = "NV"
120
- }
121
- } ;
122
-
123
- //{ "Address": { "Line1": "1234 Main Street", "Line2": "Apt. 404", "City": "Las Vegas", "State": "NV" } }
124
- var stringValue = obj . ToJson ( ) ;
125
-
126
- db . Insert ( new TestType { StringColumn = stringValue } ) ;
127
-
128
- // retrieve only the State in a field that contains a JSON Address
129
- var state = db . Scalar < string > (
130
- db . From < TestType > ( ) . Select ( q =>
131
- Sql . As ( Sql . JsonValue ( q . StringColumn , "$.Address.State" ) , "State" )
99
+ // retrieve only the State in a field that contains a JSON Address
100
+ var state = Db . Scalar < string > (
101
+ Db . From < TestType > ( )
102
+ . Where ( q => q . Id == 2 )
103
+ . Select ( q =>
104
+ Sql . JsonValue ( q . StringColumn , "$.State" )
132
105
)
133
- ) ;
106
+ ) ;
134
107
135
- Assert . AreEqual ( state , obj . Address . State ) ;
136
- }
108
+ Assert . AreEqual ( state , Addr . State ) ;
137
109
}
138
110
139
111
[ Test ]
140
112
public void Can_select_a_json_object_value ( )
141
113
{
142
- using ( var db = OpenDbConnection ( ) )
143
- {
144
- db . DropAndCreateTable < TestType > ( ) ;
145
-
146
- var expected = new Address
147
- {
148
- Line1 = "1234 Main Street" ,
149
- Line2 = "Apt. 404" ,
150
- City = "Las Vegas" ,
151
- State = "NV"
152
- } ;
153
-
154
- //{ "Line1": "1234 Main Street", "Line2": "Apt. 404", "City": "Las Vegas", "State": "NV" }
155
- var stringValue = expected . ToJson ( ) ;
156
-
157
- db . Insert ( new TestType { StringColumn = stringValue } ) ;
158
-
159
- // demo how to retrieve inserted JSON string directly to an object
160
- var address = db . Scalar < Address > (
161
- db . From < TestType > ( ) . Select ( q => q . StringColumn )
114
+ // demo how to retrieve inserted JSON string directly to an object
115
+ var address = Db . Scalar < Address > (
116
+ Db . From < TestType > ( )
117
+ . Where ( q => q . Id == 2 )
118
+ . Select ( q => q . StringColumn )
162
119
) ;
163
120
164
- var sql = db . GetLastSql ( ) ;
165
-
166
- Assert . That ( expected . Line1 , Is . EqualTo ( address . Line1 ) ) ;
167
- Assert . That ( expected . Line2 , Is . EqualTo ( address . Line2 ) ) ;
168
- Assert . That ( expected . City , Is . EqualTo ( address . City ) ) ;
169
- Assert . That ( expected . State , Is . EqualTo ( address . State ) ) ;
170
- }
121
+ Assert . That ( Addr . Line1 , Is . EqualTo ( address . Line1 ) ) ;
122
+ Assert . That ( Addr . Line2 , Is . EqualTo ( address . Line2 ) ) ;
123
+ Assert . That ( Addr . City , Is . EqualTo ( address . City ) ) ;
124
+ Assert . That ( Addr . State , Is . EqualTo ( address . State ) ) ;
171
125
}
172
126
173
127
[ Ignore ( "Not functioning properly, issue with converter" ) ]
174
128
[ Test ]
175
129
public void Can_insert_an_object_directly_to_json ( )
176
130
{
177
- using ( var db = OpenDbConnection ( ) )
178
- {
179
- db . DropAndCreateTable < TestType > ( ) ;
131
+ var tableName = Db . GetDialectProvider ( ) . GetQuotedTableName ( ModelDefinition < TestType > . Definition ) ;
132
+ var sql = $ "INSERT { tableName } (StringColumn) VALUES (@Address);";
180
133
181
- var expected = new Address
182
- {
183
- Line1 = "1234 Main Street" ,
184
- Line2 = "Apt. 404" ,
185
- City = "Las Vegas" ,
186
- State = "NV"
187
- } ;
134
+ // breaks here with an invalid conversion error from Address to string
135
+ Db . ExecuteSql ( sql , new { Id = 3 , Address = Addr } ) ;
188
136
189
- var tableName = db . GetDialectProvider ( ) . GetQuotedTableName ( ModelDefinition < TestType > . Definition ) ;
190
-
191
- var sql = $ "INSERT { tableName } (StringColumn) VALUES (@StringColumn);";
192
- db . ExecuteSql ( sql , new { StringColumn = expected } ) ;
193
-
194
- // demo how to retrieve inserted JSON string directly to an object
195
- var address = db . Scalar < Address > (
196
- db . From < TestType > ( ) . Select ( q => q . StringColumn )
137
+ // demo how to retrieve inserted JSON string directly to an object
138
+ var address = Db . Single < Address > (
139
+ Db . From < TestType > ( )
140
+ . Where ( q => q . Id == 3 )
141
+ . Select ( q => q . StringColumn )
197
142
) ;
198
143
199
- Assert . That ( expected . Line1 , Is . EqualTo ( address . Line1 ) ) ;
200
- Assert . That ( expected . Line2 , Is . EqualTo ( address . Line2 ) ) ;
201
- Assert . That ( expected . City , Is . EqualTo ( address . City ) ) ;
202
- Assert . That ( expected . State , Is . EqualTo ( address . State ) ) ;
203
- }
204
-
144
+ Assert . That ( Addr . Line1 , Is . EqualTo ( address . Line1 ) ) ;
145
+ Assert . That ( Addr . Line2 , Is . EqualTo ( address . Line2 ) ) ;
146
+ Assert . That ( Addr . City , Is . EqualTo ( address . City ) ) ;
147
+ Assert . That ( Addr . State , Is . EqualTo ( address . State ) ) ;
205
148
}
206
149
207
- public class Address : ISqlJson
150
+ [ SqlJson ]
151
+ public class Address
208
152
{
209
153
public string Line1 { get ; set ; }
210
154
public string Line2 { get ; set ; }
0 commit comments