@@ -184,3 +184,133 @@ def test_compare_neq(first_sql: str, second_sql: str) -> None:
184184def test_statement_type (sql : str , expected_type : str ) -> None :
185185 statement = sql_compare .Statement (sqlparse .parse (sql )[0 ])
186186 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+ "TYPE" ,
262+ "public" ,
263+ "." ,
264+ "status" ,
265+ "AS" ,
266+ "ENUM" ,
267+ "(" ,
268+ "'APPROVED'" ,
269+ "," ,
270+ "'PENDING'" ,
271+ "," ,
272+ "'REJECTED'" ,
273+ ";" ,
274+ ],
275+ ],
276+ [
277+ [
278+ "CREATE" ,
279+ "TABLE" ,
280+ "logs" ,
281+ "(" ,
282+ "id" ,
283+ "INT" ,
284+ "," ,
285+ "message" ,
286+ "TEXT" ,
287+ ";" ,
288+ ],
289+ [
290+ "CREATE" ,
291+ "TYPE" ,
292+ "public" ,
293+ "." ,
294+ "status" ,
295+ "AS" ,
296+ "ENUM" ,
297+ "(" ,
298+ "'APPROVED'" ,
299+ "," ,
300+ "'ARCHIVED'" ,
301+ "," ,
302+ "'PENDING'" ,
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
0 commit comments