@@ -184,3 +184,137 @@ def test_compare_neq(first_sql: str, second_sql: str) -> None:
184
184
def test_statement_type (sql : str , expected_type : str ) -> None :
185
185
statement = sql_compare .Statement (sqlparse .parse (sql )[0 ])
186
186
assert statement .statement_type == expected_type
187
+
188
+
189
+ @pytest .mark .parametrize (
190
+ ("first_sql" , "second_sql" , "expected_diff" ),
191
+ [
192
+ (
193
+ "CREATE TABLE foo (id INT PRIMARY KEY)" ,
194
+ "CREATE TABLE foo (id INT UNIQUE)" ,
195
+ [
196
+ [["CREATE" , "TABLE" , "foo" , "(" , "id" , "INT" , "PRIMARY KEY" ]],
197
+ [["CREATE" , "TABLE" , "foo" , "(" , "id" , "INT" , "UNIQUE" ]],
198
+ ],
199
+ ),
200
+ (
201
+ "CREATE TYPE public.colors AS ENUM ('RED', 'GREEN', 'BLUE')" ,
202
+ "CREATE TYPE public.colors AS ENUM ('BLUE', 'GREEN', 'RED')" ,
203
+ [[], []],
204
+ ),
205
+ (
206
+ "CREATE TYPE public.colors AS ENUM ('RED', 'GREEN', 'BLUE')" ,
207
+ "CREATE TYPE public.colors AS ENUM ('YELLOW', 'BLUE', 'RED')" ,
208
+ [
209
+ [
210
+ [
211
+ "CREATE" ,
212
+ "TYPE" ,
213
+ "public" ,
214
+ "." ,
215
+ "colors" ,
216
+ "AS" ,
217
+ "ENUM" ,
218
+ "(" ,
219
+ "'BLUE'" ,
220
+ "," ,
221
+ "'GREEN'" ,
222
+ "," ,
223
+ "'RED'" ,
224
+ ],
225
+ ],
226
+ [
227
+ [
228
+ "CREATE" ,
229
+ "TYPE" ,
230
+ "public" ,
231
+ "." ,
232
+ "colors" ,
233
+ "AS" ,
234
+ "ENUM" ,
235
+ "(" ,
236
+ "'BLUE'" ,
237
+ "," ,
238
+ "'RED'" ,
239
+ "," ,
240
+ "'YELLOW'" ,
241
+ ],
242
+ ],
243
+ ],
244
+ ),
245
+ (
246
+ """
247
+ CREATE TYPE public.status AS ENUM ('PENDING', 'APPROVED', 'REJECTED');
248
+ CREATE TABLE users (id INT, name VARCHAR(100), status public.status);
249
+ CREATE INDEX user_status_idx ON users (status);
250
+ """ ,
251
+ """
252
+ CREATE TYPE public.status AS ENUM ('PENDING', 'APPROVED', 'ARCHIVED');
253
+ CREATE TABLE logs (id INT, message TEXT);
254
+ CREATE TABLE users (id INT, name VARCHAR(100), status public.status);
255
+ CREATE INDEX user_status_idx ON users (status);
256
+ """ ,
257
+ [
258
+ [
259
+ [
260
+ "CREATE" ,
261
+ "TABLE" ,
262
+ "logs" ,
263
+ "(" ,
264
+ "id" ,
265
+ "INT" ,
266
+ "," ,
267
+ "message" ,
268
+ "TEXT" ,
269
+ ";" ,
270
+ ],
271
+ [
272
+ "CREATE" ,
273
+ "TYPE" ,
274
+ "public" ,
275
+ "." ,
276
+ "status" ,
277
+ "AS" ,
278
+ "ENUM" ,
279
+ "(" ,
280
+ "'APPROVED'" ,
281
+ "," ,
282
+ "'ARCHIVED'" ,
283
+ "," ,
284
+ "'PENDING'" ,
285
+ ";" ,
286
+ ],
287
+ ],
288
+ [
289
+ [
290
+ "CREATE" ,
291
+ "TYPE" ,
292
+ "public" ,
293
+ "." ,
294
+ "status" ,
295
+ "AS" ,
296
+ "ENUM" ,
297
+ "(" ,
298
+ "'APPROVED'" ,
299
+ "," ,
300
+ "'PENDING'" ,
301
+ "," ,
302
+ "'REJECTED'" ,
303
+ ";" ,
304
+ ],
305
+ ],
306
+ ],
307
+ ),
308
+ ],
309
+ )
310
+ def test_get_diff (
311
+ first_sql : str ,
312
+ second_sql : str ,
313
+ expected_diff : list [list [list [str ]]],
314
+ ) -> None :
315
+ result = sql_compare .get_diff (first_sql , second_sql )
316
+ assert result == expected_diff
317
+ assert sql_compare .get_diff (first_sql , second_sql ) == sql_compare .get_diff (
318
+ second_sql ,
319
+ first_sql ,
320
+ )
0 commit comments