From e77a046c55097c71f9ce063c8ee603480f7576ac Mon Sep 17 00:00:00 2001 From: Peter Bae Date: Tue, 26 Sep 2017 14:33:51 -0700 Subject: [PATCH 1/6] Implement checkDuplicateColumnName to check duplicate columns --- .../sqlserver/jdbc/SQLServerDataTable.java | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDataTable.java b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDataTable.java index d3f176a31..939ac5163 100644 --- a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDataTable.java +++ b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDataTable.java @@ -13,10 +13,12 @@ import java.time.OffsetDateTime; import java.time.OffsetTime; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; +import java.util.Set; import java.util.UUID; public final class SQLServerDataTable { @@ -24,6 +26,7 @@ public final class SQLServerDataTable { int rowCount = 0; int columnCount = 0; Map columnMetadata = null; + Set columnList = null; Map rows = null; private String tvpName = null; @@ -37,6 +40,7 @@ public final class SQLServerDataTable { // Name used in CREATE TYPE public SQLServerDataTable() throws SQLServerException { columnMetadata = new LinkedHashMap<>(); + columnList = new HashSet<>(); rows = new HashMap<>(); } @@ -75,7 +79,7 @@ public synchronized Iterator> getIterator() { public synchronized void addColumnMetadata(String columnName, int sqlType) throws SQLServerException { // column names must be unique - Util.checkDuplicateColumnName(columnName, columnMetadata); + checkDuplicateColumnName(columnName); columnMetadata.put(columnCount++, new SQLServerDataColumn(columnName, sqlType)); } @@ -89,10 +93,29 @@ public synchronized void addColumnMetadata(String columnName, */ public synchronized void addColumnMetadata(SQLServerDataColumn column) throws SQLServerException { // column names must be unique - Util.checkDuplicateColumnName(column.columnName, columnMetadata); + checkDuplicateColumnName(column.columnName); columnMetadata.put(columnCount++, column); } + /** + * Checks if duplicate columns exists, in O(n) time. + * + * @param columnName + * the name of the column + * @throws SQLServerException + * when a duplicate column exists + */ + private void checkDuplicateColumnName(String columnName) throws SQLServerException { + if (null != columnList) { + //columnList.add will return false if the same column name already exists + if (!columnList.add(columnName)) { + MessageFormat form = new MessageFormat(SQLServerException.getErrString("R_TVPDuplicateColumnName")); + Object[] msgArgs = {columnName}; + throw new SQLServerException(null, form.format(msgArgs), null, 0, false); + } + } + } + /** * Adds one row of data to the data table. * From 8f69956400134ad0e10aadc94ed2eb5dee9ef980 Mon Sep 17 00:00:00 2001 From: Peter Bae Date: Wed, 27 Sep 2017 14:42:36 -0700 Subject: [PATCH 2/6] Revert "Implement checkDuplicateColumnName to check duplicate columns" This reverts commit e77a046c55097c71f9ce063c8ee603480f7576ac. --- .../sqlserver/jdbc/SQLServerDataTable.java | 27 ++----------------- 1 file changed, 2 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDataTable.java b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDataTable.java index 939ac5163..d3f176a31 100644 --- a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDataTable.java +++ b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDataTable.java @@ -13,12 +13,10 @@ import java.time.OffsetDateTime; import java.time.OffsetTime; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; -import java.util.Set; import java.util.UUID; public final class SQLServerDataTable { @@ -26,7 +24,6 @@ public final class SQLServerDataTable { int rowCount = 0; int columnCount = 0; Map columnMetadata = null; - Set columnList = null; Map rows = null; private String tvpName = null; @@ -40,7 +37,6 @@ public final class SQLServerDataTable { // Name used in CREATE TYPE public SQLServerDataTable() throws SQLServerException { columnMetadata = new LinkedHashMap<>(); - columnList = new HashSet<>(); rows = new HashMap<>(); } @@ -79,7 +75,7 @@ public synchronized Iterator> getIterator() { public synchronized void addColumnMetadata(String columnName, int sqlType) throws SQLServerException { // column names must be unique - checkDuplicateColumnName(columnName); + Util.checkDuplicateColumnName(columnName, columnMetadata); columnMetadata.put(columnCount++, new SQLServerDataColumn(columnName, sqlType)); } @@ -93,29 +89,10 @@ public synchronized void addColumnMetadata(String columnName, */ public synchronized void addColumnMetadata(SQLServerDataColumn column) throws SQLServerException { // column names must be unique - checkDuplicateColumnName(column.columnName); + Util.checkDuplicateColumnName(column.columnName, columnMetadata); columnMetadata.put(columnCount++, column); } - /** - * Checks if duplicate columns exists, in O(n) time. - * - * @param columnName - * the name of the column - * @throws SQLServerException - * when a duplicate column exists - */ - private void checkDuplicateColumnName(String columnName) throws SQLServerException { - if (null != columnList) { - //columnList.add will return false if the same column name already exists - if (!columnList.add(columnName)) { - MessageFormat form = new MessageFormat(SQLServerException.getErrString("R_TVPDuplicateColumnName")); - Object[] msgArgs = {columnName}; - throw new SQLServerException(null, form.format(msgArgs), null, 0, false); - } - } - } - /** * Adds one row of data to the data table. * From f8e89dfeb58623f3e1827f444afe8df7ce172be7 Mon Sep 17 00:00:00 2001 From: Peter Bae Date: Wed, 27 Sep 2017 15:00:53 -0700 Subject: [PATCH 3/6] Revert "Revert "Implement checkDuplicateColumnName to check duplicate columns"" This reverts commit 8f69956400134ad0e10aadc94ed2eb5dee9ef980. --- .../sqlserver/jdbc/SQLServerDataTable.java | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDataTable.java b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDataTable.java index d3f176a31..939ac5163 100644 --- a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDataTable.java +++ b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDataTable.java @@ -13,10 +13,12 @@ import java.time.OffsetDateTime; import java.time.OffsetTime; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; +import java.util.Set; import java.util.UUID; public final class SQLServerDataTable { @@ -24,6 +26,7 @@ public final class SQLServerDataTable { int rowCount = 0; int columnCount = 0; Map columnMetadata = null; + Set columnList = null; Map rows = null; private String tvpName = null; @@ -37,6 +40,7 @@ public final class SQLServerDataTable { // Name used in CREATE TYPE public SQLServerDataTable() throws SQLServerException { columnMetadata = new LinkedHashMap<>(); + columnList = new HashSet<>(); rows = new HashMap<>(); } @@ -75,7 +79,7 @@ public synchronized Iterator> getIterator() { public synchronized void addColumnMetadata(String columnName, int sqlType) throws SQLServerException { // column names must be unique - Util.checkDuplicateColumnName(columnName, columnMetadata); + checkDuplicateColumnName(columnName); columnMetadata.put(columnCount++, new SQLServerDataColumn(columnName, sqlType)); } @@ -89,10 +93,29 @@ public synchronized void addColumnMetadata(String columnName, */ public synchronized void addColumnMetadata(SQLServerDataColumn column) throws SQLServerException { // column names must be unique - Util.checkDuplicateColumnName(column.columnName, columnMetadata); + checkDuplicateColumnName(column.columnName); columnMetadata.put(columnCount++, column); } + /** + * Checks if duplicate columns exists, in O(n) time. + * + * @param columnName + * the name of the column + * @throws SQLServerException + * when a duplicate column exists + */ + private void checkDuplicateColumnName(String columnName) throws SQLServerException { + if (null != columnList) { + //columnList.add will return false if the same column name already exists + if (!columnList.add(columnName)) { + MessageFormat form = new MessageFormat(SQLServerException.getErrString("R_TVPDuplicateColumnName")); + Object[] msgArgs = {columnName}; + throw new SQLServerException(null, form.format(msgArgs), null, 0, false); + } + } + } + /** * Adds one row of data to the data table. * From 91a3eea6e3cc3bb75dda4630e066b03da84f4789 Mon Sep 17 00:00:00 2001 From: Peter Bae Date: Wed, 27 Sep 2017 15:07:36 -0700 Subject: [PATCH 4/6] Apply same logic for TVP --- src/main/java/com/microsoft/sqlserver/jdbc/TVP.java | 13 ++++++++++++- .../java/com/microsoft/sqlserver/jdbc/Util.java | 2 ++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/microsoft/sqlserver/jdbc/TVP.java b/src/main/java/com/microsoft/sqlserver/jdbc/TVP.java index 6f68d685a..21f2c061d 100644 --- a/src/main/java/com/microsoft/sqlserver/jdbc/TVP.java +++ b/src/main/java/com/microsoft/sqlserver/jdbc/TVP.java @@ -12,10 +12,12 @@ import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.text.MessageFormat; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; +import java.util.Set; enum TVPType { ResultSet, @@ -48,6 +50,7 @@ class TVP { Iterator> sourceDataTableRowIterator = null; ISQLServerDataRecord sourceRecord = null; TVPType tvpType = null; + Set columnList = null; // MultiPartIdentifierState enum MPIState { @@ -94,6 +97,7 @@ void initTVP(TVPType type, ISQLServerDataRecord tvpRecord) throws SQLServerException { initTVP(TVPType.ISQLServerDataRecord, tvpPartName); sourceRecord = tvpRecord; + columnList = new HashSet<>(); // Populate TVP metdata from ISQLServerDataRecord. populateMetadataFromDataRecord(); @@ -186,7 +190,14 @@ void populateMetadataFromDataRecord() throws SQLServerException { } for (int i = 0; i < sourceRecord.getColumnCount(); i++) { // Make a copy here as we do not want to change user's metadata. - Util.checkDuplicateColumnName(sourceRecord.getColumnMetaData(i + 1).columnName, columnMetadata); + if (null != columnList) { + //columnList.add will return false if the same column name already exists + if (!columnList.add(sourceRecord.getColumnMetaData(i + 1).columnName)) { + MessageFormat form = new MessageFormat(SQLServerException.getErrString("R_TVPDuplicateColumnName")); + Object[] msgArgs = {sourceRecord.getColumnMetaData(i + 1).columnName}; + throw new SQLServerException(null, form.format(msgArgs), null, 0, false); + } + } SQLServerMetaData metaData = new SQLServerMetaData(sourceRecord.getColumnMetaData(i + 1)); columnMetadata.put(i, metaData); } diff --git a/src/main/java/com/microsoft/sqlserver/jdbc/Util.java b/src/main/java/com/microsoft/sqlserver/jdbc/Util.java index db10ebce1..ad43f0f74 100644 --- a/src/main/java/com/microsoft/sqlserver/jdbc/Util.java +++ b/src/main/java/com/microsoft/sqlserver/jdbc/Util.java @@ -558,6 +558,7 @@ static String escapeSQLId(String inID) { return outID.toString(); } + /* static void checkDuplicateColumnName(String columnName, Map columnMetadata) throws SQLServerException { if (columnMetadata.get(0) instanceof SQLServerMetaData) { @@ -581,6 +582,7 @@ else if (columnMetadata.get(0) instanceof SQLServerDataColumn) { } } } + */ /** * Reads a UNICODE string from byte buffer at offset (up to byteLength). From 8c0ebf26e8b424eb33ccbe49d3a238d5ca6c43b7 Mon Sep 17 00:00:00 2001 From: Peter Bae Date: Thu, 5 Oct 2017 10:32:15 -0700 Subject: [PATCH 5/6] remove null check and change Set object name --- .../sqlserver/jdbc/SQLServerDataTable.java | 16 +++++++--------- .../com/microsoft/sqlserver/jdbc/TVP.java | 19 +++++++++---------- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDataTable.java b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDataTable.java index 939ac5163..34fbd2314 100644 --- a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDataTable.java +++ b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDataTable.java @@ -26,7 +26,7 @@ public final class SQLServerDataTable { int rowCount = 0; int columnCount = 0; Map columnMetadata = null; - Set columnList = null; + Set columnNames = null; Map rows = null; private String tvpName = null; @@ -40,7 +40,7 @@ public final class SQLServerDataTable { // Name used in CREATE TYPE public SQLServerDataTable() throws SQLServerException { columnMetadata = new LinkedHashMap<>(); - columnList = new HashSet<>(); + columnNames = new HashSet<>(); rows = new HashMap<>(); } @@ -106,13 +106,11 @@ public synchronized void addColumnMetadata(SQLServerDataColumn column) throws SQ * when a duplicate column exists */ private void checkDuplicateColumnName(String columnName) throws SQLServerException { - if (null != columnList) { - //columnList.add will return false if the same column name already exists - if (!columnList.add(columnName)) { - MessageFormat form = new MessageFormat(SQLServerException.getErrString("R_TVPDuplicateColumnName")); - Object[] msgArgs = {columnName}; - throw new SQLServerException(null, form.format(msgArgs), null, 0, false); - } + //columnList.add will return false if the same column name already exists + if (!columnNames.add(columnName)) { + MessageFormat form = new MessageFormat(SQLServerException.getErrString("R_TVPDuplicateColumnName")); + Object[] msgArgs = {columnName}; + throw new SQLServerException(null, form.format(msgArgs), null, 0, false); } } diff --git a/src/main/java/com/microsoft/sqlserver/jdbc/TVP.java b/src/main/java/com/microsoft/sqlserver/jdbc/TVP.java index 21f2c061d..a99ee8a37 100644 --- a/src/main/java/com/microsoft/sqlserver/jdbc/TVP.java +++ b/src/main/java/com/microsoft/sqlserver/jdbc/TVP.java @@ -50,7 +50,7 @@ class TVP { Iterator> sourceDataTableRowIterator = null; ISQLServerDataRecord sourceRecord = null; TVPType tvpType = null; - Set columnList = null; + Set columnNames = null; // MultiPartIdentifierState enum MPIState { @@ -97,7 +97,7 @@ void initTVP(TVPType type, ISQLServerDataRecord tvpRecord) throws SQLServerException { initTVP(TVPType.ISQLServerDataRecord, tvpPartName); sourceRecord = tvpRecord; - columnList = new HashSet<>(); + columnNames = new HashSet<>(); // Populate TVP metdata from ISQLServerDataRecord. populateMetadataFromDataRecord(); @@ -189,15 +189,14 @@ void populateMetadataFromDataRecord() throws SQLServerException { throw new SQLServerException(SQLServerException.getErrString("R_TVPEmptyMetadata"), null); } for (int i = 0; i < sourceRecord.getColumnCount(); i++) { - // Make a copy here as we do not want to change user's metadata. - if (null != columnList) { - //columnList.add will return false if the same column name already exists - if (!columnList.add(sourceRecord.getColumnMetaData(i + 1).columnName)) { - MessageFormat form = new MessageFormat(SQLServerException.getErrString("R_TVPDuplicateColumnName")); - Object[] msgArgs = {sourceRecord.getColumnMetaData(i + 1).columnName}; - throw new SQLServerException(null, form.format(msgArgs), null, 0, false); - } + //columnList.add will return false if the same column name already exists + if (!columnNames.add(sourceRecord.getColumnMetaData(i + 1).columnName)) { + MessageFormat form = new MessageFormat(SQLServerException.getErrString("R_TVPDuplicateColumnName")); + Object[] msgArgs = {sourceRecord.getColumnMetaData(i + 1).columnName}; + throw new SQLServerException(null, form.format(msgArgs), null, 0, false); } + + // Make a copy here as we do not want to change user's metadata. SQLServerMetaData metaData = new SQLServerMetaData(sourceRecord.getColumnMetaData(i + 1)); columnMetadata.put(i, metaData); } From adf10ea484bdc9a2d39feb6a119650446a3f17c2 Mon Sep 17 00:00:00 2001 From: Peter Bae Date: Fri, 6 Oct 2017 15:58:09 -0700 Subject: [PATCH 6/6] Refactoring the logic for checking duplicate column into Util class and adding a test case for this --- .../sqlserver/jdbc/SQLServerDataTable.java | 20 +--------- .../com/microsoft/sqlserver/jdbc/TVP.java | 7 +--- .../com/microsoft/sqlserver/jdbc/Util.java | 39 ++++++++----------- .../jdbc/datatypes/TVPWithSqlVariantTest.java | 17 ++++++++ 4 files changed, 36 insertions(+), 47 deletions(-) diff --git a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDataTable.java b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDataTable.java index 34fbd2314..60188841a 100644 --- a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDataTable.java +++ b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDataTable.java @@ -79,7 +79,7 @@ public synchronized Iterator> getIterator() { public synchronized void addColumnMetadata(String columnName, int sqlType) throws SQLServerException { // column names must be unique - checkDuplicateColumnName(columnName); + Util.checkDuplicateColumnName(columnName, columnNames); columnMetadata.put(columnCount++, new SQLServerDataColumn(columnName, sqlType)); } @@ -93,26 +93,10 @@ public synchronized void addColumnMetadata(String columnName, */ public synchronized void addColumnMetadata(SQLServerDataColumn column) throws SQLServerException { // column names must be unique - checkDuplicateColumnName(column.columnName); + Util.checkDuplicateColumnName(column.columnName, columnNames); columnMetadata.put(columnCount++, column); } - /** - * Checks if duplicate columns exists, in O(n) time. - * - * @param columnName - * the name of the column - * @throws SQLServerException - * when a duplicate column exists - */ - private void checkDuplicateColumnName(String columnName) throws SQLServerException { - //columnList.add will return false if the same column name already exists - if (!columnNames.add(columnName)) { - MessageFormat form = new MessageFormat(SQLServerException.getErrString("R_TVPDuplicateColumnName")); - Object[] msgArgs = {columnName}; - throw new SQLServerException(null, form.format(msgArgs), null, 0, false); - } - } /** * Adds one row of data to the data table. diff --git a/src/main/java/com/microsoft/sqlserver/jdbc/TVP.java b/src/main/java/com/microsoft/sqlserver/jdbc/TVP.java index a99ee8a37..fa3d07dd6 100644 --- a/src/main/java/com/microsoft/sqlserver/jdbc/TVP.java +++ b/src/main/java/com/microsoft/sqlserver/jdbc/TVP.java @@ -189,12 +189,7 @@ void populateMetadataFromDataRecord() throws SQLServerException { throw new SQLServerException(SQLServerException.getErrString("R_TVPEmptyMetadata"), null); } for (int i = 0; i < sourceRecord.getColumnCount(); i++) { - //columnList.add will return false if the same column name already exists - if (!columnNames.add(sourceRecord.getColumnMetaData(i + 1).columnName)) { - MessageFormat form = new MessageFormat(SQLServerException.getErrString("R_TVPDuplicateColumnName")); - Object[] msgArgs = {sourceRecord.getColumnMetaData(i + 1).columnName}; - throw new SQLServerException(null, form.format(msgArgs), null, 0, false); - } + Util.checkDuplicateColumnName(sourceRecord.getColumnMetaData(i + 1).columnName, columnNames); // Make a copy here as we do not want to change user's metadata. SQLServerMetaData metaData = new SQLServerMetaData(sourceRecord.getColumnMetaData(i + 1)); diff --git a/src/main/java/com/microsoft/sqlserver/jdbc/Util.java b/src/main/java/com/microsoft/sqlserver/jdbc/Util.java index ad43f0f74..c1d6d81dc 100644 --- a/src/main/java/com/microsoft/sqlserver/jdbc/Util.java +++ b/src/main/java/com/microsoft/sqlserver/jdbc/Util.java @@ -19,6 +19,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Properties; +import java.util.Set; import java.util.UUID; import java.util.logging.Level; import java.util.logging.LogManager; @@ -557,32 +558,24 @@ static String escapeSQLId(String inID) { outID.append(']'); return outID.toString(); } - - /* + + /** + * Checks if duplicate columns exists, in O(n) time. + * + * @param columnName + * the name of the column + * @throws SQLServerException + * when a duplicate column exists + */ static void checkDuplicateColumnName(String columnName, - Map columnMetadata) throws SQLServerException { - if (columnMetadata.get(0) instanceof SQLServerMetaData) { - for (Entry entry : columnMetadata.entrySet()) { - SQLServerMetaData value = (SQLServerMetaData) entry.getValue(); - if (value.columnName.equals(columnName)) { - MessageFormat form = new MessageFormat(SQLServerException.getErrString("R_TVPDuplicateColumnName")); - Object[] msgArgs = {columnName}; - throw new SQLServerException(null, form.format(msgArgs), null, 0, false); - } - } - } - else if (columnMetadata.get(0) instanceof SQLServerDataColumn) { - for (Entry entry : columnMetadata.entrySet()) { - SQLServerDataColumn value = (SQLServerDataColumn) entry.getValue(); - if (value.columnName.equals(columnName)) { - MessageFormat form = new MessageFormat(SQLServerException.getErrString("R_TVPDuplicateColumnName")); - Object[] msgArgs = {columnName}; - throw new SQLServerException(null, form.format(msgArgs), null, 0, false); - } - } + Set columnNames) throws SQLServerException { + //columnList.add will return false if the same column name already exists + if (!columnNames.add(columnName)) { + MessageFormat form = new MessageFormat(SQLServerException.getErrString("R_TVPDuplicateColumnName")); + Object[] msgArgs = {columnName}; + throw new SQLServerException(null, form.format(msgArgs), null, 0, false); } } - */ /** * Reads a UNICODE string from byte buffer at offset (up to byteLength). diff --git a/src/test/java/com/microsoft/sqlserver/jdbc/datatypes/TVPWithSqlVariantTest.java b/src/test/java/com/microsoft/sqlserver/jdbc/datatypes/TVPWithSqlVariantTest.java index da20156c7..2e1fe11f6 100644 --- a/src/test/java/com/microsoft/sqlserver/jdbc/datatypes/TVPWithSqlVariantTest.java +++ b/src/test/java/com/microsoft/sqlserver/jdbc/datatypes/TVPWithSqlVariantTest.java @@ -378,6 +378,23 @@ public void testIntStoredProcedure() throws SQLServerException { Cstatement.close(); } } + + /** + * Test for allowing duplicate columns + * + * @throws SQLServerException + */ + @Test + public void testDuplicateColumn() throws SQLServerException { + tvp = new SQLServerDataTable(); + tvp.addColumnMetadata("c1", microsoft.sql.Types.SQL_VARIANT); + tvp.addColumnMetadata("c2", microsoft.sql.Types.SQL_VARIANT); + try { + tvp.addColumnMetadata("c2", microsoft.sql.Types.SQL_VARIANT); + } catch (SQLServerException e) { + assertEquals(e.getMessage(), "A column name c2 already belongs to this SQLServerDataTable."); + } + } private static String[] createNumericValues() { Boolean C1_BIT;