Skip to content

Commit f9d3ed6

Browse files
author
Dave Cramer
committed
metadata encoding patch from Kris Jurka
1 parent 42610b1 commit f9d3ed6

File tree

1 file changed

+65
-56
lines changed

1 file changed

+65
-56
lines changed

src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java

Lines changed: 65 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.*;
66
import org.postgresql.core.BaseStatement;
77
import org.postgresql.core.Field;
8+
import org.postgresql.core.Encoding;
89
import org.postgresql.util.PSQLException;
910
import org.postgresql.util.PSQLState;
1011
import org.postgresql.Driver;
@@ -22,6 +23,7 @@ public abstract class AbstractJdbc1DatabaseMetaData
2223
"vacuum,verbose,version";
2324

2425
protected AbstractJdbc1Connection connection; // The connection association
26+
protected Encoding encoding;
2527

2628
// These define various OID's. Hopefully they will stay constant.
2729
protected static final int iVarcharOid = 1043; // OID for varchar
@@ -73,6 +75,13 @@ protected int getMaxNameLength() throws SQLException {
7375
public AbstractJdbc1DatabaseMetaData(AbstractJdbc1Connection conn)
7476
{
7577
this.connection = conn;
78+
try {
79+
this.encoding = conn.getEncoding();
80+
}
81+
catch (SQLException sqle) {
82+
this.encoding = Encoding.defaultEncoding();
83+
}
84+
7685
}
7786

7887
/*
@@ -1858,15 +1867,15 @@ public java.sql.ResultSet getProcedureColumns(String catalog, String schemaPatte
18581867
tuple[0] = null;
18591868
tuple[1] = schema;
18601869
tuple[2] = procedureName;
1861-
tuple[3] = "returnValue".getBytes();
1862-
tuple[4] = Integer.toString(java.sql.DatabaseMetaData.procedureColumnReturn).getBytes();
1863-
tuple[5] = Integer.toString(connection.getSQLType(returnType)).getBytes();
1864-
tuple[6] = connection.getPGType(returnType).getBytes();
1870+
tuple[3] = encoding.encode("returnValue");
1871+
tuple[4] = encoding.encode(Integer.toString(java.sql.DatabaseMetaData.procedureColumnReturn));
1872+
tuple[5] = encoding.encode(Integer.toString(connection.getSQLType(returnType)));
1873+
tuple[6] = encoding.encode(connection.getPGType(returnType));
18651874
tuple[7] = null;
18661875
tuple[8] = null;
18671876
tuple[9] = null;
18681877
tuple[10] = null;
1869-
tuple[11] = Integer.toString(java.sql.DatabaseMetaData.procedureNullableUnknown).getBytes();
1878+
tuple[11] = encoding.encode(Integer.toString(java.sql.DatabaseMetaData.procedureNullableUnknown));
18701879
tuple[12] = null;
18711880
v.addElement(tuple);
18721881
}
@@ -1878,15 +1887,15 @@ public java.sql.ResultSet getProcedureColumns(String catalog, String schemaPatte
18781887
tuple[0] = null;
18791888
tuple[1] = schema;
18801889
tuple[2] = procedureName;
1881-
tuple[3] = ("$"+(i+1)).getBytes();
1882-
tuple[4] = Integer.toString(java.sql.DatabaseMetaData.procedureColumnIn).getBytes();
1883-
tuple[5] = Integer.toString(connection.getSQLType(argOid)).getBytes();
1884-
tuple[6] = connection.getPGType(argOid).getBytes();
1890+
tuple[3] = encoding.encode("$"+(i+1));
1891+
tuple[4] = encoding.encode(Integer.toString(java.sql.DatabaseMetaData.procedureColumnIn));
1892+
tuple[5] = encoding.encode(Integer.toString(connection.getSQLType(argOid)));
1893+
tuple[6] = encoding.encode(connection.getPGType(argOid));
18851894
tuple[7] = null;
18861895
tuple[8] = null;
18871896
tuple[9] = null;
18881897
tuple[10] = null;
1889-
tuple[11] = Integer.toString(java.sql.DatabaseMetaData.procedureNullableUnknown).getBytes();
1898+
tuple[11] = encoding.encode(Integer.toString(java.sql.DatabaseMetaData.procedureNullableUnknown));
18901899
tuple[12] = null;
18911900
v.addElement(tuple);
18921901
}
@@ -1901,15 +1910,15 @@ public java.sql.ResultSet getProcedureColumns(String catalog, String schemaPatte
19011910
tuple[0] = null;
19021911
tuple[1] = schema;
19031912
tuple[2] = procedureName;
1904-
tuple[3] = columnrs.getString("attname").getBytes();
1905-
tuple[4] = Integer.toString(java.sql.DatabaseMetaData.procedureColumnResult).getBytes();
1906-
tuple[5] = Integer.toString(connection.getSQLType(columnTypeOid)).getBytes();
1907-
tuple[6] = connection.getPGType(columnTypeOid).getBytes();
1913+
tuple[3] = columnrs.getBytes("attname");
1914+
tuple[4] = encoding.encode(Integer.toString(java.sql.DatabaseMetaData.procedureColumnResult));
1915+
tuple[5] = encoding.encode(Integer.toString(connection.getSQLType(columnTypeOid)));
1916+
tuple[6] = encoding.encode(connection.getPGType(columnTypeOid));
19081917
tuple[7] = null;
19091918
tuple[8] = null;
19101919
tuple[9] = null;
19111920
tuple[10] = null;
1912-
tuple[11] = Integer.toString(java.sql.DatabaseMetaData.procedureNullableUnknown).getBytes();
1921+
tuple[11] = encoding.encode(Integer.toString(java.sql.DatabaseMetaData.procedureNullableUnknown));
19131922
tuple[12] = null;
19141923
v.addElement(tuple);
19151924
}
@@ -2205,7 +2214,7 @@ public java.sql.ResultSet getTableTypes() throws SQLException
22052214
for (i=0; i < types.length; i++)
22062215
{
22072216
byte[][] tuple = new byte[1][];
2208-
tuple[0] = types[i].getBytes();
2217+
tuple[0] = encoding.encode(types[i]);
22092218
v.addElement(tuple);
22102219
}
22112220

@@ -2338,46 +2347,46 @@ public java.sql.ResultSet getColumns(String catalog, String schemaPattern, Strin
23382347
tuple[1] = rs.getBytes("nspname"); // Schema
23392348
tuple[2] = rs.getBytes("relname"); // Table name
23402349
tuple[3] = rs.getBytes("attname"); // Column name
2341-
tuple[4] = Integer.toString(connection.getSQLType(typeOid)).getBytes();
2350+
tuple[4] = encoding.encode(Integer.toString(connection.getSQLType(typeOid)));
23422351
String pgType = connection.getPGType(typeOid);
2343-
tuple[5] = pgType.getBytes(); // Type name
2352+
tuple[5] = encoding.encode(pgType); // Type name
23442353

23452354
// by default no decimal_digits
23462355
// if the type is numeric or decimal we will
23472356
// overwrite later.
2348-
tuple[8] = "0".getBytes();
2357+
tuple[8] = encoding.encode("0");
23492358

23502359
if (pgType.equals("bpchar") || pgType.equals("varchar"))
23512360
{
23522361
int atttypmod = rs.getInt("atttypmod");
2353-
tuple[6] = Integer.toString(atttypmod != -1 ? atttypmod - VARHDRSZ : 0).getBytes();
2362+
tuple[6] = encoding.encode(Integer.toString(atttypmod != -1 ? atttypmod - VARHDRSZ : 0));
23542363
}
23552364
else if (pgType.equals("numeric") || pgType.equals("decimal"))
23562365
{
23572366
int attypmod = rs.getInt("atttypmod") - VARHDRSZ;
2358-
tuple[6] = Integer.toString( ( attypmod >> 16 ) & 0xffff ).getBytes();
2359-
tuple[8] = Integer.toString(attypmod & 0xffff).getBytes();
2360-
tuple[9] = "10".getBytes();
2367+
tuple[6] = encoding.encode(Integer.toString( ( attypmod >> 16 ) & 0xffff ));
2368+
tuple[8] = encoding.encode(Integer.toString(attypmod & 0xffff));
2369+
tuple[9] = encoding.encode("10");
23612370
}
23622371
else if (pgType.equals("bit") || pgType.equals("varbit")) {
23632372
tuple[6] = rs.getBytes("atttypmod");
2364-
tuple[9] = "2".getBytes();
2373+
tuple[9] = encoding.encode("2");
23652374
}
23662375
else {
23672376
tuple[6] = rs.getBytes("attlen");
2368-
tuple[9] = "10".getBytes();
2377+
tuple[9] = encoding.encode("10");
23692378
}
23702379

23712380
tuple[7] = null; // Buffer length
23722381

2373-
tuple[10] = Integer.toString(rs.getBoolean("attnotnull") ? java.sql.DatabaseMetaData.columnNoNulls : java.sql.DatabaseMetaData.columnNullable).getBytes(); // Nullable
2382+
tuple[10] = encoding.encode(Integer.toString(rs.getBoolean("attnotnull") ? java.sql.DatabaseMetaData.columnNoNulls : java.sql.DatabaseMetaData.columnNullable)); // Nullable
23742383
tuple[11] = rs.getBytes("description"); // Description (if any)
23752384
tuple[12] = rs.getBytes("adsrc"); // Column default
23762385
tuple[13] = null; // sql data type (unused)
23772386
tuple[14] = null; // sql datetime sub (unused)
23782387
tuple[15] = tuple[6]; // char octet length
23792388
tuple[16] = rs.getBytes("attnum"); // ordinal position
2380-
tuple[17] = (rs.getBoolean("attnotnull") ? "NO" : "YES").getBytes(); // Is nullable
2389+
tuple[17] = encoding.encode(rs.getBoolean("attnotnull") ? "NO" : "YES"); // Is nullable
23812390

23822391
v.addElement(tuple);
23832392
}
@@ -2476,7 +2485,7 @@ public java.sql.ResultSet getColumnPrivileges(String catalog, String schema, Str
24762485
}
24772486
sortStringArray(permNames);
24782487
for (i=0; i<permNames.length; i++) {
2479-
byte[] privilege = permNames[i].getBytes();
2488+
byte[] privilege = encoding.encode(permNames[i]);
24802489
Vector grantees = (Vector)permissions.get(permNames[i]);
24812490
for (int j=0; j<grantees.size(); j++) {
24822491
String grantee = (String)grantees.elementAt(j);
@@ -2486,10 +2495,10 @@ public java.sql.ResultSet getColumnPrivileges(String catalog, String schema, Str
24862495
tuple[1] = schemaName;
24872496
tuple[2] = tableName;
24882497
tuple[3] = column;
2489-
tuple[4] = owner.getBytes();
2490-
tuple[5] = grantee.getBytes();
2498+
tuple[4] = encoding.encode(owner);
2499+
tuple[5] = encoding.encode(grantee);
24912500
tuple[6] = privilege;
2492-
tuple[7] = grantable.getBytes();
2501+
tuple[7] = encoding.encode(grantable);
24932502
v.addElement(tuple);
24942503
}
24952504
}
@@ -2579,7 +2588,7 @@ public java.sql.ResultSet getTablePrivileges(String catalog, String schemaPatter
25792588
}
25802589
sortStringArray(permNames);
25812590
for (i=0; i<permNames.length; i++) {
2582-
byte[] privilege = permNames[i].getBytes();
2591+
byte[] privilege = encoding.encode(permNames[i]);
25832592
Vector grantees = (Vector)permissions.get(permNames[i]);
25842593
for (int j=0; j<grantees.size(); j++) {
25852594
String grantee = (String)grantees.elementAt(j);
@@ -2588,10 +2597,10 @@ public java.sql.ResultSet getTablePrivileges(String catalog, String schemaPatter
25882597
tuple[0] = null;
25892598
tuple[1] = schema;
25902599
tuple[2] = table;
2591-
tuple[3] = owner.getBytes();
2592-
tuple[4] = grantee.getBytes();
2600+
tuple[3] = encoding.encode(owner);
2601+
tuple[4] = encoding.encode(grantee);
25932602
tuple[5] = privilege;
2594-
tuple[6] = grantable.getBytes();
2603+
tuple[6] = encoding.encode(grantable);
25952604
v.addElement(tuple);
25962605
}
25972606
}
@@ -2785,14 +2794,14 @@ public java.sql.ResultSet getBestRowIdentifier(String catalog, String schema, St
27852794
while (rs.next()) {
27862795
byte tuple[][] = new byte[8][];
27872796
int columnTypeOid = rs.getInt("atttypid");
2788-
tuple[0] = Integer.toString(scope).getBytes();
2797+
tuple[0] = encoding.encode(Integer.toString(scope));
27892798
tuple[1] = rs.getBytes("attname");
2790-
tuple[2] = Integer.toString(connection.getSQLType(columnTypeOid)).getBytes();
2791-
tuple[3] = connection.getPGType(columnTypeOid).getBytes();
2799+
tuple[2] = encoding.encode(Integer.toString(connection.getSQLType(columnTypeOid)));
2800+
tuple[3] = encoding.encode(connection.getPGType(columnTypeOid));
27922801
tuple[4] = null;
27932802
tuple[5] = null;
27942803
tuple[6] = null;
2795-
tuple[7] = Integer.toString(java.sql.DatabaseMetaData.bestRowNotPseudo).getBytes();
2804+
tuple[7] = encoding.encode(Integer.toString(java.sql.DatabaseMetaData.bestRowNotPseudo));
27962805
v.addElement(tuple);
27972806
}
27982807

@@ -2854,13 +2863,13 @@ public java.sql.ResultSet getVersionColumns(String catalog, String schema, Strin
28542863
*/
28552864

28562865
tuple[0] = null;
2857-
tuple[1] = "ctid".getBytes();
2858-
tuple[2] = Integer.toString(connection.getSQLType("tid")).getBytes();
2859-
tuple[3] = "tid".getBytes();
2866+
tuple[1] = encoding.encode("ctid");
2867+
tuple[2] = encoding.encode(Integer.toString(connection.getSQLType("tid")));
2868+
tuple[3] = encoding.encode("tid");
28602869
tuple[4] = null;
28612870
tuple[5] = null;
28622871
tuple[6] = null;
2863-
tuple[7] = Integer.toString(java.sql.DatabaseMetaData.versionColumnPseudo).getBytes();
2872+
tuple[7] = encoding.encode(Integer.toString(java.sql.DatabaseMetaData.versionColumnPseudo));
28642873
v.addElement(tuple);
28652874

28662875
/* Perhaps we should check that the given
@@ -3157,7 +3166,7 @@ else if ("setdefault".equals(rule))
31573166
else if ("restrict".equals(rule))
31583167
action = java.sql.DatabaseMetaData.importedKeyRestrict;
31593168

3160-
tuple[9] = Integer.toString(action).getBytes();
3169+
tuple[9] = encoding.encode(Integer.toString(action));
31613170

31623171
}
31633172

@@ -3177,7 +3186,7 @@ else if ("setdefault".equals(rule))
31773186
action = java.sql.DatabaseMetaData.importedKeySetDefault;
31783187
else if ("restrict".equals(rule))
31793188
action = java.sql.DatabaseMetaData.importedKeyRestrict;
3180-
tuple[10] = Integer.toString(action).getBytes();
3189+
tuple[10] = encoding.encode(Integer.toString(action));
31813190
}
31823191

31833192

@@ -3217,11 +3226,11 @@ else if ("restrict".equals(rule))
32173226
pkeyColumn = (String)tokens.elementAt(element);
32183227
}
32193228

3220-
tuple[3] = pkeyColumn.getBytes(); //PKCOLUMN_NAME
3221-
tuple[7] = fkeyColumn.getBytes(); //FKCOLUMN_NAME
3229+
tuple[3] = encoding.encode(pkeyColumn); //PKCOLUMN_NAME
3230+
tuple[7] = encoding.encode(fkeyColumn); //FKCOLUMN_NAME
32223231

32233232
tuple[8] = rs.getBytes(6); //KEY_SEQ
3224-
tuple[11] = fkName.getBytes(); //FK_NAME this will give us a unique name for the foreign key
3233+
tuple[11] = encoding.encode(fkName); //FK_NAME this will give us a unique name for the foreign key
32253234
tuple[12] = rs.getBytes(7); //PK_NAME
32263235

32273236
// DEFERRABILITY
@@ -3235,7 +3244,7 @@ else if ("restrict".equals(rule))
32353244
else
32363245
deferrability = java.sql.DatabaseMetaData.importedKeyInitiallyImmediate;
32373246
}
3238-
tuple[13] = Integer.toString(deferrability).getBytes();
3247+
tuple[13] = encoding.encode(Integer.toString(deferrability));
32393248

32403249
tuples.addElement(tuple);
32413250
}
@@ -3498,18 +3507,18 @@ public java.sql.ResultSet getTypeInfo() throws SQLException
34983507
ResultSet rs = connection.createStatement().executeQuery(sql);
34993508
// cache some results, this will keep memory useage down, and speed
35003509
// things up a little.
3501-
byte b9[] = "9".getBytes();
3502-
byte b10[] = "10".getBytes();
3503-
byte bf[] = "f".getBytes();
3504-
byte bnn[] = Integer.toString(java.sql.DatabaseMetaData.typeNoNulls).getBytes();
3505-
byte bts[] = Integer.toString(java.sql.DatabaseMetaData.typeSearchable).getBytes();
3510+
byte b9[] = encoding.encode("9");
3511+
byte b10[] = encoding.encode("10");
3512+
byte bf[] = encoding.encode("f");
3513+
byte bnn[] = encoding.encode(Integer.toString(java.sql.DatabaseMetaData.typeNoNulls));
3514+
byte bts[] = encoding.encode(Integer.toString(java.sql.DatabaseMetaData.typeSearchable));
35063515

35073516
while (rs.next())
35083517
{
35093518
byte[][] tuple = new byte[18][];
35103519
String typname = rs.getString(1);
3511-
tuple[0] = typname.getBytes();
3512-
tuple[1] = Integer.toString(connection.getSQLType(typname)).getBytes();
3520+
tuple[0] = encoding.encode(typname);
3521+
tuple[1] = encoding.encode(Integer.toString(connection.getSQLType(typname)));
35133522
tuple[2] = b9; // for now
35143523
tuple[6] = bnn; // for now
35153524
tuple[7] = bf; // false for now - not case sensitive

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy