public ExtendedColumnInfo(TableColumnInfo info, String simpleTableName) { _columnName = info.getColumnName(); _columnType = info.getTypeName(); _columnTypeID = info.getDataType(); _columnSize = info.getColumnSize(); _decimalDigits = info.getDecimalDigits(); _remarks = info.getRemarks(); if ("YES".equals(info.isNullable())) { _nullable = true; } else { _nullable = false; } _cat = info.getCatalogName(); _schem = info.getSchemaName(); _simpleTableName = simpleTableName; _qualifiedName = _cat + "." + _schem + "." + _simpleTableName + "." + _columnName; }
/** * Create table script for selected node. * * @see org.eclipse.jface.action.IAction#run() */ @Override public void run() { TableNode tableNode = (TableNode) _selectedNodes[0]; ITableInfo info = tableNode.getTableInfo(); StringBuffer buf = new StringBuffer(4 * 1024); String sep = System.getProperty("line.separator"); try { SQLDatabaseMetaData metaData = tableNode.getSession().getMetaData(); ArrayList<String> pks = new ArrayList<String>(); PrimaryKeyInfo[] pksInfo = metaData.getPrimaryKey(info); for (PrimaryKeyInfo pkInfo : pksInfo) pks.add(pkInfo.getColumnName()); TableColumnInfo[] columnsInfo = metaData.getColumnInfo(info); String tableName = _selectedNodes[0].getQualifiedName(); buf.append("CREATE TABLE "); buf.append(tableName); buf.append("("); for (TableColumnInfo col : columnsInfo) { // String columnName = resultSet.getString(4); // String typeName = resultSet.getString(6); // String columnSize = resultSet.getString(7); // String decimalDigits = resultSet.getString(9); // String defaultValue = resultSet.getString(13); boolean notNull = "NO".equalsIgnoreCase(col.isNullable()); String sLower = col.getColumnName().toLowerCase(); buf.append(sep); buf.append(col.getColumnName() + " "); buf.append(col.getTypeName()); boolean bNumeric = false; if (sLower.equals("numeric") || sLower.equals("number") || sLower.equals("decimal")) bNumeric = true; if (sLower.indexOf("char") != -1 || sLower.indexOf("int") != -1) { buf.append("("); buf.append(col.getColumnSize()); buf.append(")"); } else if (bNumeric) { buf.append("("); buf.append(col.getColumnSize()); if (col.getDecimalDigits() > 0) buf.append(col.getDecimalDigits()); buf.append(")"); } if (pks.size() == 1 && pks.get(0).equals(col.getColumnName())) { buf.append(" PRIMARY KEY"); } String defaultValue = col.getDefaultValue(); if (defaultValue != null && !defaultValue.equals("")) { buf.append(" default "); boolean isSystemValue = bNumeric; if (defaultValue.equalsIgnoreCase("CURRENT_TIMESTAMP")) { isSystemValue = true; } if (!isSystemValue) buf.append("'"); buf.append(defaultValue); if (!isSystemValue) buf.append("'"); } if (notNull) { buf.append(" not null"); } buf.append(","); } buf.deleteCharAt(buf.length() - 1); buf.append(")" + sep); SQLEditorInput input = new SQLEditorInput( "SQL Editor (" + SQLExplorerPlugin.getDefault().getEditorSerialNo() + ").sql"); input.setUser(_selectedNodes[0].getSession().getUser()); IWorkbenchPage page = SQLExplorerPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage(); SQLEditor editorPart = (SQLEditor) page.openEditor(input, "com.safi.workshop.sqlexplorer.plugin.editors.SQLEditor"); editorPart.setText(buf.toString()); } catch (SQLException e) { SQLExplorerPlugin.error("Error creating export script", e); } catch (PartInitException e) { SQLExplorerPlugin.error("Error creating export script", e); } }