@@ -7305,14 +7305,35 @@ dumpBaseType(Archive *fout, TypeInfo *tyinfo)
73057305 char * typbyval ;
73067306 char * typalign ;
73077307 char * typstorage ;
7308+ char * typcollatable ;
73087309 char * typdefault ;
73097310 bool typdefault_is_literal = false;
73107311
73117312 /* Set proper schema search path so regproc references list correctly */
73127313 selectSourceSchema (tyinfo -> dobj .namespace -> dobj .name );
73137314
73147315 /* Fetch type-specific details */
7315- if (fout -> remoteVersion >= 80400 )
7316+ if (fout -> remoteVersion >= 90100 )
7317+ {
7318+ appendPQExpBuffer (query , "SELECT typlen, "
7319+ "typinput, typoutput, typreceive, typsend, "
7320+ "typmodin, typmodout, typanalyze, "
7321+ "typinput::pg_catalog.oid AS typinputoid, "
7322+ "typoutput::pg_catalog.oid AS typoutputoid, "
7323+ "typreceive::pg_catalog.oid AS typreceiveoid, "
7324+ "typsend::pg_catalog.oid AS typsendoid, "
7325+ "typmodin::pg_catalog.oid AS typmodinoid, "
7326+ "typmodout::pg_catalog.oid AS typmodoutoid, "
7327+ "typanalyze::pg_catalog.oid AS typanalyzeoid, "
7328+ "typcategory, typispreferred, "
7329+ "typdelim, typbyval, typalign, typstorage, "
7330+ "(typcollation = (SELECT oid FROM pg_catalog.pg_collation WHERE collname = 'default')) AS typcollatable, "
7331+ "pg_catalog.pg_get_expr(typdefaultbin, 0) AS typdefaultbin, typdefault "
7332+ "FROM pg_catalog.pg_type "
7333+ "WHERE oid = '%u'::pg_catalog.oid" ,
7334+ tyinfo -> dobj .catId .oid );
7335+ }
7336+ else if (fout -> remoteVersion >= 80400 )
73167337 {
73177338 appendPQExpBuffer (query , "SELECT typlen, "
73187339 "typinput, typoutput, typreceive, typsend, "
@@ -7326,6 +7347,7 @@ dumpBaseType(Archive *fout, TypeInfo *tyinfo)
73267347 "typanalyze::pg_catalog.oid AS typanalyzeoid, "
73277348 "typcategory, typispreferred, "
73287349 "typdelim, typbyval, typalign, typstorage, "
7350+ "false AS typcollatable, "
73297351 "pg_catalog.pg_get_expr(typdefaultbin, 0) AS typdefaultbin, typdefault "
73307352 "FROM pg_catalog.pg_type "
73317353 "WHERE oid = '%u'::pg_catalog.oid" ,
@@ -7346,6 +7368,7 @@ dumpBaseType(Archive *fout, TypeInfo *tyinfo)
73467368 "typanalyze::pg_catalog.oid AS typanalyzeoid, "
73477369 "'U' AS typcategory, false AS typispreferred, "
73487370 "typdelim, typbyval, typalign, typstorage, "
7371+ "false AS typcollatable, "
73497372 "pg_catalog.pg_get_expr(typdefaultbin, 'pg_catalog.pg_type'::pg_catalog.regclass) AS typdefaultbin, typdefault "
73507373 "FROM pg_catalog.pg_type "
73517374 "WHERE oid = '%u'::pg_catalog.oid" ,
@@ -7365,6 +7388,7 @@ dumpBaseType(Archive *fout, TypeInfo *tyinfo)
73657388 "typanalyze::pg_catalog.oid AS typanalyzeoid, "
73667389 "'U' AS typcategory, false AS typispreferred, "
73677390 "typdelim, typbyval, typalign, typstorage, "
7391+ "false AS typcollatable, "
73687392 "pg_catalog.pg_get_expr(typdefaultbin, 'pg_catalog.pg_type'::pg_catalog.regclass) AS typdefaultbin, typdefault "
73697393 "FROM pg_catalog.pg_type "
73707394 "WHERE oid = '%u'::pg_catalog.oid" ,
@@ -7384,6 +7408,7 @@ dumpBaseType(Archive *fout, TypeInfo *tyinfo)
73847408 "0 AS typanalyzeoid, "
73857409 "'U' AS typcategory, false AS typispreferred, "
73867410 "typdelim, typbyval, typalign, typstorage, "
7411+ "false AS typcollatable, "
73877412 "pg_catalog.pg_get_expr(typdefaultbin, 'pg_catalog.pg_type'::pg_catalog.regclass) AS typdefaultbin, typdefault "
73887413 "FROM pg_catalog.pg_type "
73897414 "WHERE oid = '%u'::pg_catalog.oid" ,
@@ -7403,6 +7428,7 @@ dumpBaseType(Archive *fout, TypeInfo *tyinfo)
74037428 "0 AS typanalyzeoid, "
74047429 "'U' AS typcategory, false AS typispreferred, "
74057430 "typdelim, typbyval, typalign, typstorage, "
7431+ "false AS typcollatable, "
74067432 "pg_catalog.pg_get_expr(typdefaultbin, 'pg_catalog.pg_type'::pg_catalog.regclass) AS typdefaultbin, typdefault "
74077433 "FROM pg_catalog.pg_type "
74087434 "WHERE oid = '%u'::pg_catalog.oid" ,
@@ -7426,6 +7452,7 @@ dumpBaseType(Archive *fout, TypeInfo *tyinfo)
74267452 "0 AS typanalyzeoid, "
74277453 "'U' AS typcategory, false AS typispreferred, "
74287454 "typdelim, typbyval, typalign, typstorage, "
7455+ "false AS typcollatable, "
74297456 "NULL AS typdefaultbin, typdefault "
74307457 "FROM pg_type "
74317458 "WHERE oid = '%u'::oid" ,
@@ -7449,6 +7476,7 @@ dumpBaseType(Archive *fout, TypeInfo *tyinfo)
74497476 "0 AS typanalyzeoid, "
74507477 "'U' AS typcategory, false AS typispreferred, "
74517478 "typdelim, typbyval, typalign, typstorage, "
7479+ "false AS typcollatable, "
74527480 "NULL AS typdefaultbin, NULL AS typdefault "
74537481 "FROM pg_type "
74547482 "WHERE oid = '%u'::oid" ,
@@ -7469,6 +7497,7 @@ dumpBaseType(Archive *fout, TypeInfo *tyinfo)
74697497 "'U' AS typcategory, false AS typispreferred, "
74707498 "typdelim, typbyval, typalign, "
74717499 "'p'::char AS typstorage, "
7500+ "false AS typcollatable, "
74727501 "NULL AS typdefaultbin, NULL AS typdefault "
74737502 "FROM pg_type "
74747503 "WHERE oid = '%u'::oid" ,
@@ -7510,6 +7539,7 @@ dumpBaseType(Archive *fout, TypeInfo *tyinfo)
75107539 typbyval = PQgetvalue (res , 0 , PQfnumber (res , "typbyval" ));
75117540 typalign = PQgetvalue (res , 0 , PQfnumber (res , "typalign" ));
75127541 typstorage = PQgetvalue (res , 0 , PQfnumber (res , "typstorage" ));
7542+ typcollatable = PQgetvalue (res , 0 , PQfnumber (res , "typcollatable" ));
75137543 if (!PQgetisnull (res , 0 , PQfnumber (res , "typdefaultbin" )))
75147544 typdefault = PQgetvalue (res , 0 , PQfnumber (res , "typdefaultbin" ));
75157545 else if (!PQgetisnull (res , 0 , PQfnumber (res , "typdefault" )))
@@ -7566,6 +7596,9 @@ dumpBaseType(Archive *fout, TypeInfo *tyinfo)
75667596 /* receive/send/typmodin/typmodout/analyze need not be printed */
75677597 }
75687598
7599+ if (strcmp (typcollatable , "t" ) == 0 )
7600+ appendPQExpBuffer (q , ",\n COLLATABLE = true" );
7601+
75697602 if (typdefault != NULL )
75707603 {
75717604 appendPQExpBuffer (q , ",\n DEFAULT = " );
0 commit comments