@@ -297,9 +297,9 @@ CREATE VIEW attributes AS
297
297
CAST(null AS sql_identifier)AS character_set_schema,
298
298
CAST(null AS sql_identifier)AS character_set_name,
299
299
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,
303
303
304
304
CAST(
305
305
_pg_numeric_precision(_pg_truetypid(a, t), _pg_truetypmod(a, t))
@@ -336,14 +336,13 @@ CREATE VIEW attributes AS
336
336
CAST(a .attnum AS sql_identifier)AS dtd_identifier,
337
337
CAST(' NO' AS yes_or_no)AS is_derived_reference_attribute
338
338
339
- FROM (pg_attribute aLEFT JOIN pg_attrdef adON attrelid= adrelidAND attnum= adnum),
340
- pg_class c, pg_namespace nc,
341
- (pg_type tJOIN pg_namespace ntON (t .typnamespace = nt .oid ))
339
+ FROM (pg_attribute aLEFT JOIN pg_attrdef adON attrelid= adrelidAND attnum= adnum)
340
+ JOIN (pg_class cJOIN pg_namespace ncON (c .relnamespace = nc .oid ))ON a .attrelid = c .oid
341
+ JOIN (pg_type tJOIN pg_namespace ntON (t .typnamespace = nt .oid ))ON a .atttypid = t .oid
342
+ LEFT JOIN (pg_collation coJOIN pg_namespace ncoON (co .collnamespace = nco .oid ))
343
+ ON a .attcollation = co .oid AND (nco .nspname ,co .collname )<> (' pg_catalog' ,' default' )
342
344
343
- WHERE a .attrelid = c .oid
344
- AND a .atttypid = t .oid
345
- AND nc .oid = c .relnamespace
346
- AND a .attnum > 0 AND NOTa .attisdropped
345
+ WHERE a .attnum > 0 AND NOTa .attisdropped
347
346
AND c .relkind in (' c' );
348
347
349
348
GRANT SELECT ON attributes TO PUBLIC;
@@ -678,9 +677,9 @@ CREATE VIEW columns AS
678
677
CAST(null AS sql_identifier)AS character_set_schema,
679
678
CAST(null AS sql_identifier)AS character_set_name,
680
679
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,
684
683
685
684
CAST(CASE WHENt .typtype = ' d' THEN current_database() ELSEnull END
686
685
AS sql_identifier)AS domain_catalog,
@@ -718,16 +717,15 @@ CREATE VIEW columns AS
718
717
AND EXISTS (SELECT 1 FROM pg_rewriteWHERE ev_class= c .oid AND ev_type= ' 4' AND is_instead))
719
718
THEN' YES' ELSE' NO' ENDAS yes_or_no)AS is_updatable
720
719
721
- FROM (pg_attribute aLEFT JOIN pg_attrdef adON attrelid= adrelidAND attnum= adnum),
722
- pg_class c, pg_namespace nc,
723
- (pg_type tJOIN pg_namespace ntON (t .typnamespace = nt .oid ))
724
- LEFT JOIN (pg_type btJOIN pg_namespace nbtON (bt .typnamespace = nbt .oid ))
720
+ FROM (pg_attribute aLEFT JOIN pg_attrdef adON attrelid= adrelidAND attnum= adnum)
721
+ JOIN ( pg_class cJOIN pg_namespace ncON ( c . relnamespace = nc . oid )) ON a . attrelid = c . oid
722
+ JOIN (pg_type tJOIN pg_namespace ntON (t .typnamespace = nt .oid ))ON a . atttypid = t . oid
723
+ LEFT JOIN (pg_type btJOIN pg_namespace nbtON (bt .typnamespace = nbt .oid ))
725
724
ON (t .typtype = ' d' AND t .typbasetype = bt .oid )
725
+ LEFT JOIN (pg_collation coJOIN pg_namespace ncoON (co .collnamespace = nco .oid ))
726
+ ON a .attcollation = co .oid AND (nco .nspname ,co .collname )<> (' pg_catalog' ,' default' )
726
727
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 ))
731
729
732
730
AND a .attnum > 0 AND NOTa .attisdropped AND c .relkind in (' r' ,' v' ,' f' )
733
731
@@ -914,9 +912,9 @@ CREATE VIEW domains AS
914
912
CAST(null AS sql_identifier)AS character_set_schema,
915
913
CAST(null AS sql_identifier)AS character_set_name,
916
914
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,
920
918
921
919
CAST(
922
920
_pg_numeric_precision(t .typbasetype ,t .typtypmod )
@@ -954,13 +952,13 @@ CREATE VIEW domains AS
954
952
CAST(null AS cardinal_number)AS maximum_cardinality,
955
953
CAST(1 AS sql_identifier)AS dtd_identifier
956
954
957
- FROM pg_type t, pg_namespace nt,
958
- pg_type bt, pg_namespace nbt
955
+ FROM (pg_type tJOIN pg_namespace ntON t .typnamespace = nt .oid )
956
+ JOIN (pg_type btJOIN pg_namespace nbtON bt .typnamespace = nbt .oid )
957
+ ON (t .typbasetype = bt .oid AND t .typtype = ' d' )
958
+ LEFT JOIN (pg_collation coJOIN pg_namespace ncoON (co .collnamespace = nco .oid ))
959
+ ON t .typcollation = co .oid AND (nco .nspname ,co .collname )<> (' pg_catalog' ,' default' )
959
960
960
- WHERE t .typnamespace = nt .oid
961
- AND t .typbasetype = bt .oid
962
- AND bt .typnamespace = nbt .oid
963
- AND t .typtype = ' d' ;
961
+ ;
964
962
965
963
GRANT SELECT ON domains TO PUBLIC;
966
964
@@ -1515,7 +1513,7 @@ CREATE TABLE sql_implementation_info (
1515
1513
) WITHOUT OIDS;
1516
1514
1517
1515
INSERT INTO sql_implementation_infoVALUES (' 10003' ,' CATALOG NAME' ,NULL ,' Y' ,NULL );
1518
- INSERT INTO sql_implementation_infoVALUES (' 10004' ,' COLLATING SEQUENCE' ,NULL ,' ' , ' not supported ' );
1516
+ INSERT INTO sql_implementation_infoVALUES (' 10004' ,' COLLATING SEQUENCE' ,NULL ,( SELECT default_collate_name FROM character_sets), NULL );
1519
1517
INSERT INTO sql_implementation_infoVALUES (' 23' ,' CURSOR COMMIT BEHAVIOR' ,1 ,NULL ,' close cursors and retain prepared statements' );
1520
1518
INSERT INTO sql_implementation_infoVALUES (' 2' ,' DATA SOURCE NAME' ,NULL ,' ' ,NULL );
1521
1519
INSERT INTO sql_implementation_infoVALUES (' 17' ,' DBMS NAME' ,NULL , (select trim (trailing' ' from substring (version()from ' ^[^0-9]*' ))),NULL );
@@ -2442,9 +2440,9 @@ CREATE VIEW element_types AS
2442
2440
CAST(null AS sql_identifier)AS character_set_catalog,
2443
2441
CAST(null AS sql_identifier)AS character_set_schema,
2444
2442
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,
2448
2446
CAST(null AS cardinal_number)AS numeric_precision,
2449
2447
CAST(null AS cardinal_number)AS numeric_precision_radix,
2450
2448
CAST(null AS cardinal_number)AS numeric_scale,
@@ -2470,7 +2468,7 @@ CREATE VIEW element_types AS
2470
2468
/* columns, attributes*/
2471
2469
SELECT c .relnamespace , CAST(c .relname AS sql_identifier),
2472
2470
CASE WHENc .relkind = ' c' THEN' USER-DEFINED TYPE' ::text ELSE' TABLE' ::text END,
2473
- a .attnum ,a .atttypid
2471
+ a .attnum ,a .atttypid , a . attcollation
2474
2472
FROM pg_class c, pg_attribute a
2475
2473
WHERE c .oid = a .attrelid
2476
2474
AND c .relkind IN (' r' ,' v' ,' f' ,' c' )
@@ -2480,15 +2478,15 @@ CREATE VIEW element_types AS
2480
2478
2481
2479
/* domains*/
2482
2480
SELECT t .typnamespace , CAST(t .typname AS sql_identifier),
2483
- ' DOMAIN' ::text ,1 ,t .typbasetype
2481
+ ' DOMAIN' ::text ,1 ,t .typbasetype , t . typcollation
2484
2482
FROM pg_type t
2485
2483
WHERE t .typtype = ' d'
2486
2484
2487
2485
UNION ALL
2488
2486
2489
2487
/* parameters*/
2490
2488
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
2492
2490
FROM (SELECT p .pronamespace ,p .proname ,p .oid ,
2493
2491
_pg_expandarray(coalesce(p .proallargtypes ,p .proargtypes ::oid []))AS x
2494
2492
FROM pg_proc p)AS ss
@@ -2497,10 +2495,12 @@ CREATE VIEW element_types AS
2497
2495
2498
2496
/* result types*/
2499
2497
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
2501
2499
FROM pg_proc p
2502
2500
2503
- )AS x (objschema, objname, objtype, objdtdid, objtypeid)
2501
+ )AS x (objschema, objname, objtype, objdtdid, objtypeid, objcollation)
2502
+ LEFT JOIN (pg_collation coJOIN pg_namespace ncoON (co .collnamespace = nco .oid ))
2503
+ ON x .objcollation = co .oid AND (nco .nspname ,co .collname )<> (' pg_catalog' ,' default' )
2504
2504
2505
2505
WHERE n .oid = x .objschema
2506
2506
AND at .oid = x .objtypeid