@@ -293,116 +293,36 @@ mod tests {
293293 }
294294
295295 #[ test]
296- fn test_parser_beefy ( ) {
296+ fn test_parser_anonther ( ) {
297297 init ( ) ;
298298
299- panic_after ( Duration :: from_millis ( 1000 ) , || {
300- let input = "SELECT
301- c.oid::int8 AS id,
302- nc.nspname AS schema,
303- c.relname AS name,
304- c.relrowsecurity AS rls_enabled,
305- c.relforcerowsecurity AS rls_forced,
306- CASE
307- WHEN c.relreplident = 'd' THEN 'DEFAULT'
308- WHEN c.relreplident = 'i' THEN 'INDEX'
309- WHEN c.relreplident = 'f' THEN 'FULL'
310- ELSE 'NOTHING'
311- END AS replica_identity,
312- pg_total_relation_size(format('%I.%I', nc.nspname, c.relname)) :: int8 AS bytes,
313- pg_size_pretty(
314- pg_total_relation_size(format('%I.%I', nc.nspname, c.relname))
315- ) AS size,
316- pg_stat_get_live_tuples(c.oid) AS live_rows_estimate,
317- pg_stat_get_dead_tuples(c.oid) AS dead_rows_estimate,
318- obj_description(c.oid) AS comment,
319- coalesce(pk.primary_keys, '[]') as primary_keys,
320- coalesce(
321- jsonb_agg(relationships) filter (where relationships is not null),
322- '[]'
323- ) as relationships
324- FROM
325- pg_namespace nc
326- JOIN pg_class c ON nc.oid = c.relnamespace
327- left join (
328- select
329- table_id,
330- jsonb_agg(_pk.*) as primary_keys
331- from (
332- select
333- n.nspname as schema,
334- c.relname as table_name,
335- a.attname as name,
336- c.oid :: int8 as table_id
337- from
338- pg_index i,
339- pg_class c,
340- pg_attribute a,
341- pg_namespace n
342- where
343- i.indrelid = c.oid
344- and c.relnamespace = n.oid
345- and a.attrelid = c.oid
346- and a.attnum = any (i.indkey)
347- and i.indisprimary
348- ) as _pk
349- group by table_id
350- ) as pk
351- on pk.table_id = c.oid
352- left join (
353- select
354- c.oid :: int8 as id,
355- c.conname as constraint_name,
356- nsa.nspname as source_schema,
357- csa.relname as source_table_name,
358- sa.attname as source_column_name,
359- nta.nspname as target_table_schema,
360- cta.relname as target_table_name,
361- ta.attname as target_column_name
362- from
363- pg_constraint c
364- join (
365- pg_attribute sa
366- join pg_class csa on sa.attrelid = csa.oid
367- join pg_namespace nsa on csa.relnamespace = nsa.oid
368- ) on sa.attrelid = c.conrelid and sa.attnum = any (c.conkey)
369- join (
370- pg_attribute ta
371- join pg_class cta on ta.attrelid = cta.oid
372- join pg_namespace nta on cta.relnamespace = nta.oid
373- ) on ta.attrelid = c.confrelid and ta.attnum = any (c.confkey)
374- where
375- c.contype = 'f'
376- ) as relationships
377- on (relationships.source_schema = nc.nspname and relationships.source_table_name = c.relname)
378- or (relationships.target_table_schema = nc.nspname and relationships.target_table_name = c.relname)
379- WHERE
380- c.relkind IN ('r', 'p')
381- AND NOT pg_is_other_temp_schema(nc.oid)
382- AND (
383- pg_has_role(c.relowner, 'USAGE')
384- OR has_table_privilege(
385- c.oid,
386- 'SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER'
387- )
388- OR has_any_column_privilege(c.oid, 'SELECT, INSERT, UPDATE, REFERENCES')
389- )
390- group by
391- c.oid,
392- c.relname,
393- c.relrowsecurity,
394- c.relforcerowsecurity,
395- c.relreplident,
396- nc.nspname,
397- pk.primary_keys" ;
398-
399- let mut p = Parser :: new ( lex ( input) ) ;
400- source ( & mut p) ;
401- let result = p. finish ( ) ;
299+ let input = "SELECT 1 from contact c
300+ JOIN pg_class c ON nc.oid = c.relnamespace
301+ left join (
302+ select
303+ table_id,
304+ jsonb_agg(_pk.*) as primary_keys
305+ from (
306+ select 1
307+ from
308+ pg_index i,
309+ pg_class c,
310+ pg_attribute a,
311+ pg_namespace n
312+ where
313+ i.indrelid = c.oid
314+ and c.relnamespace = n.oid
315+ ) as _pk
316+ group by table_id
317+ ) as pk
318+ on pk.table_id = c.oid;" ;
319+
320+ let mut p = Parser :: new ( lex ( input) ) ;
321+ source ( & mut p) ;
322+ let result = p. finish ( ) ;
402323
403- dbg ! ( & result. cst) ;
404- println ! ( "{:#?}" , result. errors) ;
405- } )
324+ dbg ! ( & result. cst) ;
325+ println ! ( "{:#?}" , result. errors) ;
406326 }
407327
408328 #[ test]
@@ -425,49 +345,16 @@ group by
425345 fn test_parser_simple ( ) {
426346 init ( ) ;
427347
428- panic_after ( Duration :: from_millis ( 100 ) , || {
429- let input = "alter table x rename to y \n alter table x alter column z set default 1" ;
348+ let input = "alter table x rename to y \n alter table x alter column z set default 1" ;
430349
431- let mut p = Parser :: new ( lex ( input) ) ;
432- source ( & mut p) ;
433- let result = p. finish ( ) ;
434-
435- dbg ! ( & result. cst) ;
436- println ! ( "{:#?}" , result. errors) ;
437- } )
438- }
439-
440- #[ test]
441- fn test_parser_temp ( ) {
442- init ( ) ;
443-
444- let mut p = Parser :: new ( lex ( "select 1;" ) ) ;
350+ let mut p = Parser :: new ( lex ( input) ) ;
445351 source ( & mut p) ;
446352 let result = p. finish ( ) ;
447353
448354 dbg ! ( & result. cst) ;
449355 println ! ( "{:#?}" , result. errors) ;
450356 }
451357
452- #[ test]
453- fn test_parser_playground ( ) {
454- init ( ) ;
455-
456- let res = pg_query:: parse (
457- " CREATE TABLE weather (
458- city varchar(80) references cities(name),
459- temp_lo int,
460- temp_hi int,
461- prcp real,
462- date date
463- );" ,
464- )
465- . unwrap ( ) ;
466- res. protobuf . nodes ( ) . iter ( ) . for_each ( |node| {
467- println ! ( "{:#?}" , node) ;
468- } ) ;
469- }
470-
471358 fn panic_after < T , F > ( d : Duration , f : F ) -> T
472359 where
473360 T : Send + ' static ,
0 commit comments