Author: damjan Date: Tue Sep 19 23:31:29 2017 New Revision: 1808960 URL: http://svn.apache.org/viewvc?rev=1808960&view=rev Log: When an unknown column is passed to ColumnContainer, which it will be when a new column is created, re-read it from the database.
Strings in UNO can't be null. Ensure this is the case in Column and SdbcxColumnDescriptor. Patch by: me Modified: openoffice/trunk/main/connectivity/java/sdbc_postgresql/src/com/sun/star/sdbcx/comp/postgresql/sdbcx/OColumn.java openoffice/trunk/main/connectivity/java/sdbc_postgresql/src/com/sun/star/sdbcx/comp/postgresql/sdbcx/OColumnContainer.java openoffice/trunk/main/connectivity/java/sdbc_postgresql/src/com/sun/star/sdbcx/comp/postgresql/sdbcx/descriptors/SdbcxColumnDescriptor.java Modified: openoffice/trunk/main/connectivity/java/sdbc_postgresql/src/com/sun/star/sdbcx/comp/postgresql/sdbcx/OColumn.java URL: http://svn.apache.org/viewvc/openoffice/trunk/main/connectivity/java/sdbc_postgresql/src/com/sun/star/sdbcx/comp/postgresql/sdbcx/OColumn.java?rev=1808960&r1=1808959&r2=1808960&view=diff ============================================================================== --- openoffice/trunk/main/connectivity/java/sdbc_postgresql/src/com/sun/star/sdbcx/comp/postgresql/sdbcx/OColumn.java (original) +++ openoffice/trunk/main/connectivity/java/sdbc_postgresql/src/com/sun/star/sdbcx/comp/postgresql/sdbcx/OColumn.java Tue Sep 19 23:31:29 2017 @@ -40,9 +40,9 @@ public class OColumn extends ODescriptor "com.sun.star.sdbcx.Column" }; - private String typeName; - private String description; - private String defaultValue; + private String typeName = ""; + private String description = ""; + private String defaultValue = ""; private int isNullable; private int precision; private int scale; Modified: openoffice/trunk/main/connectivity/java/sdbc_postgresql/src/com/sun/star/sdbcx/comp/postgresql/sdbcx/OColumnContainer.java URL: http://svn.apache.org/viewvc/openoffice/trunk/main/connectivity/java/sdbc_postgresql/src/com/sun/star/sdbcx/comp/postgresql/sdbcx/OColumnContainer.java?rev=1808960&r1=1808959&r2=1808960&view=diff ============================================================================== --- openoffice/trunk/main/connectivity/java/sdbc_postgresql/src/com/sun/star/sdbcx/comp/postgresql/sdbcx/OColumnContainer.java (original) +++ openoffice/trunk/main/connectivity/java/sdbc_postgresql/src/com/sun/star/sdbcx/comp/postgresql/sdbcx/OColumnContainer.java Tue Sep 19 23:31:29 2017 @@ -79,6 +79,23 @@ public class OColumnContainer extends OC boolean isAutoIncrement = false; boolean isCurrency = false; int dataType = DataType.OTHER; + + ColumnDescription columnDescription = columnDescriptions.get(name); + if (columnDescription == null) { + // could be a recently added column. Refresh: + List<ColumnDescription> newColumns = new SqlTableHelper().readColumns(metadata, table.catalogName, table.schemaName, table.getName()); + for (ColumnDescription newColumnDescription : newColumns) { + if (newColumnDescription.columnName.equals(name)) { + columnDescriptions.put(name, newColumnDescription); + break; + } + } + columnDescription = columnDescriptions.get(name); + } + if (columnDescription == null) { + throw new SQLException("No column " + name + " found"); + } + ExtraColumnInfo columnInfo = extraColumnInfo.get(name); if (columnInfo == null) { String composedName = DbTools.composeTableNameForSelect(metadata.getConnection(), table); @@ -91,20 +108,15 @@ public class OColumnContainer extends OC isCurrency = columnInfo.isCurrency; dataType = columnInfo.dataType; } - ColumnDescription columnDescription = columnDescriptions.get(name); - if (columnDescription != null) { - XNameAccess primaryKeyColumns = DbTools.getPrimaryKeyColumns(UnoRuntime.queryInterface(XPropertySet.class, table)); - int nullable = columnDescription.nullable; - if (nullable != ColumnValue.NO_NULLS && primaryKeyColumns != null && primaryKeyColumns.hasByName(name)) { - nullable = ColumnValue.NO_NULLS; - } - return new OColumn(name, columnDescription.typeName, columnDescription.defaultValue, columnDescription.remarks, - nullable, columnDescription.columnSize, columnDescription.decimalDigits, columnDescription.type, - isAutoIncrement, false, isCurrency, isCaseSensitive()); - } else { - // FIXME: do something like the C++ implementation does? - throw new SQLException(); + + XNameAccess primaryKeyColumns = DbTools.getPrimaryKeyColumns(UnoRuntime.queryInterface(XPropertySet.class, table)); + int nullable = columnDescription.nullable; + if (nullable != ColumnValue.NO_NULLS && primaryKeyColumns != null && primaryKeyColumns.hasByName(name)) { + nullable = ColumnValue.NO_NULLS; } + return new OColumn(name, columnDescription.typeName, columnDescription.defaultValue, columnDescription.remarks, + nullable, columnDescription.columnSize, columnDescription.decimalDigits, columnDescription.type, + isAutoIncrement, false, isCurrency, isCaseSensitive()); } @Override Modified: openoffice/trunk/main/connectivity/java/sdbc_postgresql/src/com/sun/star/sdbcx/comp/postgresql/sdbcx/descriptors/SdbcxColumnDescriptor.java URL: http://svn.apache.org/viewvc/openoffice/trunk/main/connectivity/java/sdbc_postgresql/src/com/sun/star/sdbcx/comp/postgresql/sdbcx/descriptors/SdbcxColumnDescriptor.java?rev=1808960&r1=1808959&r2=1808960&view=diff ============================================================================== --- openoffice/trunk/main/connectivity/java/sdbc_postgresql/src/com/sun/star/sdbcx/comp/postgresql/sdbcx/descriptors/SdbcxColumnDescriptor.java (original) +++ openoffice/trunk/main/connectivity/java/sdbc_postgresql/src/com/sun/star/sdbcx/comp/postgresql/sdbcx/descriptors/SdbcxColumnDescriptor.java Tue Sep 19 23:31:29 2017 @@ -34,14 +34,14 @@ public class SdbcxColumnDescriptor exten }; protected int type; - protected String typeName; + protected String typeName = ""; protected int precision; protected int scale; protected int isNullable; protected boolean isAutoIncrement; protected boolean isRowVersion; - protected String description; - protected String defaultValue; + protected String description = ""; + protected String defaultValue = ""; protected boolean isCurrency; public SdbcxColumnDescriptor(boolean isCaseSensitive) {