@@ -7305,14 +7305,35 @@ dumpBaseType(Archive *fout, TypeInfo *tyinfo)
73057305char * typbyval ;
73067306char * typalign ;
73077307char * typstorage ;
7308+ char * typcollatable ;
73087309char * typdefault ;
73097310bool typdefault_is_literal = false;
73107311
73117312/* Set proper schema search path so regproc references list correctly */
73127313selectSourceSchema (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{
73177338appendPQExpBuffer (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)
75107539typbyval = PQgetvalue (res ,0 ,PQfnumber (res ,"typbyval" ));
75117540typalign = PQgetvalue (res ,0 ,PQfnumber (res ,"typalign" ));
75127541typstorage = PQgetvalue (res ,0 ,PQfnumber (res ,"typstorage" ));
7542+ typcollatable = PQgetvalue (res ,0 ,PQfnumber (res ,"typcollatable" ));
75137543if (!PQgetisnull (res ,0 ,PQfnumber (res ,"typdefaultbin" )))
75147544typdefault = PQgetvalue (res ,0 ,PQfnumber (res ,"typdefaultbin" ));
75157545else 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+
75697602if (typdefault != NULL )
75707603{
75717604appendPQExpBuffer (q ,",\n DEFAULT = " );