1 package net.jaekl.squelch.stmt;
3 import java.io.IOException;
4 import java.io.PrintWriter;
5 import java.sql.Connection;
6 import java.sql.DatabaseMetaData;
7 import java.sql.ResultSet;
8 import java.sql.SQLException;
9 import java.util.Locale;
11 import net.jaekl.squelch.db.DbDriver;
13 public class Describe extends Stmt {
16 public boolean handles(String line)
22 String trimmed = line.trim();
23 if (trimmed.equals("\\d")) {
26 if (trimmed.startsWith("\\d ")) {
30 String upper = trimmed.toUpperCase(Locale.CANADA);
31 if (upper.equals("DESCRIBE")) {
34 if (upper.startsWith("DESCRIBE ")) {
42 public int exec(DbDriver driver, Connection conn, PrintWriter pw, String line)
43 throws IOException, SQLException
45 DatabaseMetaData metaData = conn.getMetaData();
47 String trimmed = line.trim();
49 if (trimmed.startsWith("\\d")) {
50 tablePattern = trimmed.substring(2).trim();
53 assert (trimmed.toUpperCase(Locale.CANADA).startsWith("DESCRIBE"));
54 tablePattern = trimmed.substring(8).trim();
56 tablePattern = driver.adjustCase(tablePattern);
58 if (tablePattern.length() < 1) {
59 return describeAll(driver, pw, metaData);
62 return describeTable(driver, pw, metaData, tablePattern);
66 int describeAll(DbDriver driver, PrintWriter pw, DatabaseMetaData metaData)
69 try (ResultSet rs = metaData.getTables(null, null, "%", null))
71 TabularResultSet tabular = new TabularResultSet(rs);
72 // TODO: StringTable i18n
73 tabular.printTable(driver, pw, "???");
79 int describeTable(DbDriver driver, PrintWriter pw, DatabaseMetaData metaData, String tablePattern)
82 boolean found = false;
83 String trimmed = tablePattern.trim();
85 try (ResultSet rs = metaData.getTables(null, null, trimmed, null))
89 describe(driver, pw, metaData, rs);
94 // TODO: StringTable i18n
95 pw.println("??? " + trimmed);
100 void describe(DbDriver driver, PrintWriter pw, DatabaseMetaData metaData, ResultSet tableRs)
103 String catalogueName = tableRs.getString(1);
104 String schemaName = tableRs.getString(2);
105 String tableName = tableRs.getString(3);
106 String tableType = tableRs.getString(4);
107 String remarks = tableRs.getString(5);
109 pw.print("" + tableType + " ");
110 if (null != catalogueName) {
111 pw.print(catalogueName + ".");
113 if (null != schemaName) {
114 pw.print(schemaName + ".");
116 pw.print("" + tableName);
117 if ((null != remarks) && (remarks.length() > 0)) {
118 pw.print(" (" + remarks + ")");
122 try (ResultSet colsRs = metaData.getColumns(catalogueName, schemaName, tableName, null))
124 TabularColumnInfo tabular = new TabularColumnInfo(colsRs);
125 // TODO: StringTable i18n
126 tabular.printTable(driver, pw, "???");