@Override public ResultSet getTableTypes() throws SQLException { String[] types = tableTypeClauses.keySet().toArray(new String[0]); Arrays.sort(types); Field[] f = new Field[1]; List<byte[][]> v = new ArrayList<byte[][]>(); f[0] = new Field("TABLE_TYPE", Oid.VARCHAR); for (String type : types) { byte[][] tuple = new byte[1][]; tuple[0] = connection.encodeString(type); v.add(tuple); } return ((BaseStatement) createMetaDataStatement()).createDriverResultSet(f, v); }
@Override public ResultSet getClientInfoProperties() throws SQLException { Field[] f = new Field[4]; f[0] = new Field("NAME", Oid.VARCHAR); f[1] = new Field("MAX_LEN", Oid.INT4); f[2] = new Field("DEFAULT_VALUE", Oid.VARCHAR); f[3] = new Field("DESCRIPTION", Oid.VARCHAR); List<byte[][]> v = new ArrayList<byte[][]>(); if (connection.haveMinimumServerVersion(ServerVersion.v9_0)) { byte[][] tuple = new byte[4][]; tuple[0] = connection.encodeString("ApplicationName"); tuple[1] = connection.encodeString(Integer.toString(getMaxNameLength())); tuple[2] = connection.encodeString(""); tuple[3] = connection .encodeString("The name of the application currently utilizing the connection."); v.add(tuple); } return ((BaseStatement) createMetaDataStatement()).createDriverResultSet(f, v); }
/** * PostgreSQL does not support multiple catalogs from a single connection, so to reduce confusion * we only return the current catalog. {@inheritDoc} */ @Override public ResultSet getCatalogs() throws SQLException { Field[] f = new Field[1]; List<byte[][]> v = new ArrayList<byte[][]>(); f[0] = new Field("TABLE_CAT", Oid.VARCHAR); byte[][] tuple = new byte[1][]; tuple[0] = connection.encodeString(connection.getCatalog()); v.add(tuple); return ((BaseStatement) createMetaDataStatement()).createDriverResultSet(f, v); }
Arrays.sort(permNames); for (String permName : permNames) { byte[] privilege = connection.encodeString(permName); Map<String, List<String[]>> grantees = permissions.get(permName); for (Map.Entry<String, List<String[]>> userToGrantable : grantees.entrySet()) { tuple[1] = schema; tuple[2] = table; tuple[3] = connection.encodeString(grantor); tuple[4] = connection.encodeString(granteeUser); tuple[5] = privilege; tuple[6] = connection.encodeString(grantable); v.add(tuple);
tuple[1] = connection.encodeString("ctid"); tuple[2] = connection.encodeString(Integer.toString(connection.getTypeInfo().getSQLType("tid"))); tuple[3] = connection.encodeString("tid"); tuple[4] = null; tuple[5] = null; tuple[6] = null; tuple[7] = connection.encodeString(Integer.toString(java.sql.DatabaseMetaData.versionColumnPseudo)); v.add(tuple);
Arrays.sort(permNames); for (String permName : permNames) { byte[] privilege = connection.encodeString(permName); Map<String, List<String[]>> grantees = permissions.get(permName); for (Map.Entry<String, List<String[]>> userToGrantable : grantees.entrySet()) { tuple[2] = tableName; tuple[3] = column; tuple[4] = connection.encodeString(grants[0]); tuple[5] = connection.encodeString(grantee); tuple[6] = privilege; tuple[7] = connection.encodeString(grantable); v.add(tuple);
byte[] procedureName = rs.getBytes("proname"); byte[] specificName = connection.encodeString(rs.getString("proname") + "_" + rs.getString("oid")); int returnType = (int) rs.getLong("prorettype"); String returnTypeType = rs.getString("typtype"); tuple[1] = schema; tuple[2] = procedureName; tuple[3] = connection.encodeString("returnValue"); tuple[4] = connection .encodeString(Integer.toString(java.sql.DatabaseMetaData.procedureColumnReturn)); tuple[5] = connection .encodeString(Integer.toString(connection.getTypeInfo().getSQLType(returnType))); tuple[6] = connection.encodeString(connection.getTypeInfo().getPGType(returnType)); tuple[7] = null; tuple[8] = null; tuple[10] = null; tuple[11] = connection .encodeString(Integer.toString(java.sql.DatabaseMetaData.procedureNullableUnknown)); tuple[12] = null; tuple[17] = connection.encodeString(Integer.toString(0)); tuple[18] = isnullableUnknown; tuple[19] = specificName; tuple[3] = connection.encodeString(argNames[i]); } else { tuple[3] = connection.encodeString("$" + (i + 1));
byte[] bZero = connection.encodeString("0"); byte[] b10 = connection.encodeString("10"); byte[] bf = connection.encodeString("f"); byte[] bt = connection.encodeString("t"); byte[] bliteral = connection.encodeString("'"); byte[] bNullable = connection.encodeString(Integer.toString(java.sql.DatabaseMetaData.typeNullable)); byte[] bSearchable = connection.encodeString(Integer.toString(java.sql.DatabaseMetaData.typeSearchable)); int typeOid = (int) rs.getLong(2); tuple[0] = connection.encodeString(typname); int sqlType = connection.getTypeInfo().getSQLType(typname); tuple[1] = connection.encodeString(Integer.toString(sqlType)); tuple[2] = connection .encodeString(Integer.toString(connection.getTypeInfo().getMaximumPrecision(typeOid))); tuple[14] = (typeOid == Oid.NUMERIC) ? connection.encodeString("1000") : bZero; tuple1[0] = connection.encodeString("serial"); tuple1[11] = bt; v.add(tuple1); tuple1[0] = connection.encodeString("bigserial"); tuple1[11] = bt; v.add(tuple1);
columnSize = connection.getTypeInfo().getDisplaySize(typeOid, typeMod); tuple[0] = connection.encodeString(Integer.toString(scope)); tuple[1] = rs.getBytes("attname"); tuple[2] = connection.encodeString(Integer.toString(connection.getTypeInfo().getSQLType(typeOid))); tuple[3] = connection.encodeString(connection.getTypeInfo().getPGType(typeOid)); tuple[4] = connection.encodeString(Integer.toString(columnSize)); tuple[5] = null; // unused tuple[6] = connection.encodeString(Integer.toString(decimalDigits)); tuple[7] = connection.encodeString(Integer.toString(java.sql.DatabaseMetaData.bestRowNotPseudo)); v.add(tuple);
tuple[4] = connection.encodeString(Integer.toString(sqlType)); String pgType = connection.getTypeInfo().getPGType(typeOid); tuple[5] = connection.encodeString(pgType); // Type name tuple[7] = null; // Buffer length if (pgType.equals("int4")) { if (defval.contains("nextval(")) { tuple[5] = connection.encodeString("serial"); // Type name == serial tuple[5] = connection.encodeString("bigserial"); // Type name == bigserial tuple[6] = connection.encodeString(Integer.toString(columnSize)); tuple[8] = connection.encodeString(Integer.toString(decimalDigits)); tuple[9] = connection.encodeString("10"); tuple[9] = connection.encodeString("2"); tuple[10] = connection.encodeString(Integer.toString(rs.getBoolean("attnotnull") tuple[14] = null; // sql datetime sub (unused) tuple[15] = tuple[6]; // char octet length tuple[16] = connection.encodeString(String.valueOf(rs.getInt("attnum"))); // ordinal position tuple[17] = connection.encodeString(rs.getBoolean("attnotnull") ? "NO" : "YES"); tuple[21] = baseTypeOid == 0 ? null : connection.encodeString(Integer.toString(connection.getTypeInfo().getSQLType(baseTypeOid))); // SOURCE_DATA_TYPE