@@ -297,9 +297,9 @@ CREATE VIEW attributes AS
297297 CAST(null AS sql_identifier) AS character_set_schema,
298298 CAST(null AS sql_identifier) AS character_set_name,
299299
300- CAST(null AS sql_identifier) AS collation_catalog,
301- CAST(null AS sql_identifier) AS collation_schema,
302- CAST(null AS sql_identifier) AS collation_name,
300+ CAST(CASE WHEN nco . nspname IS NOT NULL THEN current_database() END AS sql_identifier) AS collation_catalog,
301+ CAST(nco . nspname AS sql_identifier) AS collation_schema,
302+ CAST(co . collname AS sql_identifier) AS collation_name,
303303
304304 CAST(
305305 _pg_numeric_precision(_pg_truetypid(a, t), _pg_truetypmod(a, t))
@@ -336,14 +336,13 @@ CREATE VIEW attributes AS
336336 CAST(a .attnum AS sql_identifier) AS dtd_identifier,
337337 CAST(' NO' AS yes_or_no) AS is_derived_reference_attribute
338338
339- FROM (pg_attribute a LEFT JOIN pg_attrdef ad ON attrelid = adrelid AND attnum = adnum),
340- pg_class c, pg_namespace nc,
341- (pg_type t JOIN pg_namespace nt ON (t .typnamespace = nt .oid ))
339+ FROM (pg_attribute a LEFT JOIN pg_attrdef ad ON attrelid = adrelid AND attnum = adnum)
340+ JOIN (pg_class c JOIN pg_namespace nc ON (c .relnamespace = nc .oid )) ON a .attrelid = c .oid
341+ JOIN (pg_type t JOIN pg_namespace nt ON (t .typnamespace = nt .oid )) ON a .atttypid = t .oid
342+ LEFT JOIN (pg_collation co JOIN pg_namespace nco ON (co .collnamespace = nco .oid ))
343+ ON a .attcollation = co .oid AND (nco .nspname , co .collname ) <> (' pg_catalog' , ' default' )
342344
343- WHERE a .attrelid = c .oid
344- AND a .atttypid = t .oid
345- AND nc .oid = c .relnamespace
346- AND a .attnum > 0 AND NOT a .attisdropped
345+ WHERE a .attnum > 0 AND NOT a .attisdropped
347346 AND c .relkind in (' c' );
348347
349348GRANT SELECT ON attributes TO PUBLIC;
@@ -678,9 +677,9 @@ CREATE VIEW columns AS
678677 CAST(null AS sql_identifier) AS character_set_schema,
679678 CAST(null AS sql_identifier) AS character_set_name,
680679
681- CAST(null AS sql_identifier) AS collation_catalog,
682- CAST(null AS sql_identifier) AS collation_schema,
683- CAST(null AS sql_identifier) AS collation_name,
680+ CAST(CASE WHEN nco . nspname IS NOT NULL THEN current_database() END AS sql_identifier) AS collation_catalog,
681+ CAST(nco . nspname AS sql_identifier) AS collation_schema,
682+ CAST(co . collname AS sql_identifier) AS collation_name,
684683
685684 CAST(CASE WHEN t .typtype = ' d' THEN current_database() ELSE null END
686685 AS sql_identifier) AS domain_catalog,
@@ -718,16 +717,15 @@ CREATE VIEW columns AS
718717 AND EXISTS (SELECT 1 FROM pg_rewrite WHERE ev_class = c .oid AND ev_type = ' 4' AND is_instead))
719718 THEN ' YES' ELSE ' NO' END AS yes_or_no) AS is_updatable
720719
721- FROM (pg_attribute a LEFT JOIN pg_attrdef ad ON attrelid = adrelid AND attnum = adnum),
722- pg_class c, pg_namespace nc,
723- (pg_type t JOIN pg_namespace nt ON (t .typnamespace = nt .oid ))
724- LEFT JOIN (pg_type bt JOIN pg_namespace nbt ON (bt .typnamespace = nbt .oid ))
720+ FROM (pg_attribute a LEFT JOIN pg_attrdef ad ON attrelid = adrelid AND attnum = adnum)
721+ JOIN ( pg_class c JOIN pg_namespace nc ON ( c . relnamespace = nc . oid )) ON a . attrelid = c . oid
722+ JOIN (pg_type t JOIN pg_namespace nt ON (t .typnamespace = nt .oid )) ON a . atttypid = t . oid
723+ LEFT JOIN (pg_type bt JOIN pg_namespace nbt ON (bt .typnamespace = nbt .oid ))
725724 ON (t .typtype = ' d' AND t .typbasetype = bt .oid )
725+ LEFT JOIN (pg_collation co JOIN pg_namespace nco ON (co .collnamespace = nco .oid ))
726+ ON a .attcollation = co .oid AND (nco .nspname , co .collname ) <> (' pg_catalog' , ' default' )
726727
727- WHERE a .attrelid = c .oid
728- AND a .atttypid = t .oid
729- AND nc .oid = c .relnamespace
730- AND (NOT pg_is_other_temp_schema(nc .oid ))
728+ WHERE (NOT pg_is_other_temp_schema(nc .oid ))
731729
732730 AND a .attnum > 0 AND NOT a .attisdropped AND c .relkind in (' r' , ' v' , ' f' )
733731
@@ -914,9 +912,9 @@ CREATE VIEW domains AS
914912 CAST(null AS sql_identifier) AS character_set_schema,
915913 CAST(null AS sql_identifier) AS character_set_name,
916914
917- CAST(null AS sql_identifier) AS collation_catalog,
918- CAST(null AS sql_identifier) AS collation_schema,
919- CAST(null AS sql_identifier) AS collation_name,
915+ CAST(CASE WHEN nco . nspname IS NOT NULL THEN current_database() END AS sql_identifier) AS collation_catalog,
916+ CAST(nco . nspname AS sql_identifier) AS collation_schema,
917+ CAST(co . collname AS sql_identifier) AS collation_name,
920918
921919 CAST(
922920 _pg_numeric_precision(t .typbasetype , t .typtypmod )
@@ -954,13 +952,13 @@ CREATE VIEW domains AS
954952 CAST(null AS cardinal_number) AS maximum_cardinality,
955953 CAST(1 AS sql_identifier) AS dtd_identifier
956954
957- FROM pg_type t, pg_namespace nt,
958- pg_type bt, pg_namespace nbt
955+ FROM (pg_type t JOIN pg_namespace nt ON t .typnamespace = nt .oid )
956+ JOIN (pg_type bt JOIN pg_namespace nbt ON bt .typnamespace = nbt .oid )
957+ ON (t .typbasetype = bt .oid AND t .typtype = ' d' )
958+ LEFT JOIN (pg_collation co JOIN pg_namespace nco ON (co .collnamespace = nco .oid ))
959+ ON t .typcollation = co .oid AND (nco .nspname , co .collname ) <> (' pg_catalog' , ' default' )
959960
960- WHERE t .typnamespace = nt .oid
961- AND t .typbasetype = bt .oid
962- AND bt .typnamespace = nbt .oid
963- AND t .typtype = ' d' ;
961+ ;
964962
965963GRANT SELECT ON domains TO PUBLIC;
966964
@@ -1515,7 +1513,7 @@ CREATE TABLE sql_implementation_info (
15151513) WITHOUT OIDS;
15161514
15171515INSERT INTO sql_implementation_info VALUES (' 10003' , ' CATALOG NAME' , NULL , ' Y' , NULL );
1518- INSERT INTO sql_implementation_info VALUES (' 10004' , ' COLLATING SEQUENCE' , NULL , ' ' , ' not supported ' );
1516+ INSERT INTO sql_implementation_info VALUES (' 10004' , ' COLLATING SEQUENCE' , NULL , ( SELECT default_collate_name FROM character_sets), NULL );
15191517INSERT INTO sql_implementation_info VALUES (' 23' , ' CURSOR COMMIT BEHAVIOR' , 1 , NULL , ' close cursors and retain prepared statements' );
15201518INSERT INTO sql_implementation_info VALUES (' 2' , ' DATA SOURCE NAME' , NULL , ' ' , NULL );
15211519INSERT INTO sql_implementation_info VALUES (' 17' , ' DBMS NAME' , NULL , (select trim (trailing ' ' from substring (version() from ' ^[^0-9]*' ))), NULL );
@@ -2442,9 +2440,9 @@ CREATE VIEW element_types AS
24422440 CAST(null AS sql_identifier) AS character_set_catalog,
24432441 CAST(null AS sql_identifier) AS character_set_schema,
24442442 CAST(null AS sql_identifier) AS character_set_name,
2445- CAST(null AS sql_identifier) AS collation_catalog,
2446- CAST(null AS sql_identifier) AS collation_schema,
2447- CAST(null AS sql_identifier) AS collation_name,
2443+ CAST(CASE WHEN nco . nspname IS NOT NULL THEN current_database() END AS sql_identifier) AS collation_catalog,
2444+ CAST(nco . nspname AS sql_identifier) AS collation_schema,
2445+ CAST(co . collname AS sql_identifier) AS collation_name,
24482446 CAST(null AS cardinal_number) AS numeric_precision,
24492447 CAST(null AS cardinal_number) AS numeric_precision_radix,
24502448 CAST(null AS cardinal_number) AS numeric_scale,
@@ -2470,7 +2468,7 @@ CREATE VIEW element_types AS
24702468 /* columns, attributes */
24712469 SELECT c .relnamespace , CAST(c .relname AS sql_identifier),
24722470 CASE WHEN c .relkind = ' c' THEN ' USER-DEFINED TYPE' ::text ELSE ' TABLE' ::text END,
2473- a .attnum , a .atttypid
2471+ a .attnum , a .atttypid , a . attcollation
24742472 FROM pg_class c, pg_attribute a
24752473 WHERE c .oid = a .attrelid
24762474 AND c .relkind IN (' r' , ' v' , ' f' , ' c' )
@@ -2480,15 +2478,15 @@ CREATE VIEW element_types AS
24802478
24812479 /* domains */
24822480 SELECT t .typnamespace , CAST(t .typname AS sql_identifier),
2483- ' DOMAIN' ::text , 1 , t .typbasetype
2481+ ' DOMAIN' ::text , 1 , t .typbasetype , t . typcollation
24842482 FROM pg_type t
24852483 WHERE t .typtype = ' d'
24862484
24872485 UNION ALL
24882486
24892487 /* parameters */
24902488 SELECT pronamespace, CAST(proname || ' _' || CAST(oid AS text ) AS sql_identifier),
2491- ' ROUTINE' ::text , (ss .x ).n, (ss .x ).x
2489+ ' ROUTINE' ::text , (ss .x ).n, (ss .x ).x, 0
24922490 FROM (SELECT p .pronamespace , p .proname , p .oid ,
24932491 _pg_expandarray(coalesce(p .proallargtypes , p .proargtypes ::oid [])) AS x
24942492 FROM pg_proc p) AS ss
@@ -2497,10 +2495,12 @@ CREATE VIEW element_types AS
24972495
24982496 /* result types */
24992497 SELECT p .pronamespace , CAST(p .proname || ' _' || CAST(p .oid AS text ) AS sql_identifier),
2500- ' ROUTINE' ::text , 0 , p .prorettype
2498+ ' ROUTINE' ::text , 0 , p .prorettype , 0
25012499 FROM pg_proc p
25022500
2503- ) AS x (objschema, objname, objtype, objdtdid, objtypeid)
2501+ ) AS x (objschema, objname, objtype, objdtdid, objtypeid, objcollation)
2502+ LEFT JOIN (pg_collation co JOIN pg_namespace nco ON (co .collnamespace = nco .oid ))
2503+ ON x .objcollation = co .oid AND (nco .nspname , co .collname ) <> (' pg_catalog' , ' default' )
25042504
25052505 WHERE n .oid = x .objschema
25062506 AND at .oid = x .objtypeid
0 commit comments