From 42c8f108f9e45d7f3e97b67f7c4fe2b8fa5453f1 Mon Sep 17 00:00:00 2001 From: James Ahlborn Date: Sun, 3 May 2020 01:39:35 +0000 Subject: [PATCH] enable expression evaluation by default git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@1324 f203690c-595d-4dc9-a70b-905162fa7fd2 --- src/changes/changes.xml | 6 ++ .../jackcess/Database.java | 10 +-- .../jackcess/impl/DatabaseImpl.java | 4 +- .../jackcess/IndexTest.java | 62 ++++++++++--------- .../jackcess/impl/CalcFieldTest.java | 6 +- .../jackcess/impl/FKEnforcerTest.java | 5 +- 6 files changed, 52 insertions(+), 41 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index b7dc79d..c2f9668 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -9,6 +9,12 @@ Add support for Access 97 general collation order, enabling indexes to be used with Access 97 dbs. + + Add Stream support to all interfaces which are Iterable. + + + Enabled expression evaluation by default. + diff --git a/src/main/java/com/healthmarketscience/jackcess/Database.java b/src/main/java/com/healthmarketscience/jackcess/Database.java index 7a27f69..7e9dd85 100644 --- a/src/main/java/com/healthmarketscience/jackcess/Database.java +++ b/src/main/java/com/healthmarketscience/jackcess/Database.java @@ -129,8 +129,8 @@ public interface Database extends Iterable, Closeable, Flushable public static final String ALLOW_AUTONUM_INSERT_PROPERTY = "com.healthmarketscience.jackcess.allowAutoNumberInsert"; - /** system property which can be used to enable expression evaluation - * (currently experimental). Defaults to {@code false}. + /** system property which can be used to disable expression evaluation + * if necessary. Defaults to {@code true}. * @usage _general_field_ */ public static final String ENABLE_EXPRESSION_EVALUATION_PROPERTY = @@ -514,14 +514,14 @@ public interface Database extends Iterable
, Closeable, Flushable /** * Gets the current expression evaluation policy. Expression evaluation is - * currently an experimental feature, and is therefore disabled by default. + * enabled by default but can be disabled if necessary. */ public boolean isEvaluateExpressions(); /** * Sets the current expression evaluation policy. Expression evaluation is - * currently an experimental feature, and is therefore disabled by default. - * If {@code null}, resets to the default value. + * enabled by default but can be disabled if necessary. If {@code null}, + * resets to the default value. * @usage _intermediate_method_ */ public void setEvaluateExpressions(Boolean evaluateExpressions); diff --git a/src/main/java/com/healthmarketscience/jackcess/impl/DatabaseImpl.java b/src/main/java/com/healthmarketscience/jackcess/impl/DatabaseImpl.java index 3a63818..71b4c5e 100644 --- a/src/main/java/com/healthmarketscience/jackcess/impl/DatabaseImpl.java +++ b/src/main/java/com/healthmarketscience/jackcess/impl/DatabaseImpl.java @@ -2100,7 +2100,7 @@ public class DatabaseImpl implements Database, DateTimeContext /** * Returns the default enable expression evaluation policy. This defaults to - * {@code false}, but can be overridden using the system + * {@code true}, but can be overridden using the system * property {@value com.healthmarketscience.jackcess.Database#ENABLE_EXPRESSION_EVALUATION_PROPERTY}. * @usage _advanced_method_ */ @@ -2110,7 +2110,7 @@ public class DatabaseImpl implements Database, DateTimeContext if(prop != null) { return Boolean.TRUE.toString().equalsIgnoreCase(prop); } - return false; + return true; } /** diff --git a/src/test/java/com/healthmarketscience/jackcess/IndexTest.java b/src/test/java/com/healthmarketscience/jackcess/IndexTest.java index 47f7b89..8633dea 100644 --- a/src/test/java/com/healthmarketscience/jackcess/IndexTest.java +++ b/src/test/java/com/healthmarketscience/jackcess/IndexTest.java @@ -67,7 +67,7 @@ public class IndexTest extends TestCase { assertTrue(ByteUtil.asUnsignedByte(b3) < ByteUtil.asUnsignedByte(b4)); assertTrue(ByteUtil.asUnsignedByte(b4) < ByteUtil.asUnsignedByte(b5)); } - + public void testByteCodeComparator() { byte[] b0 = null; byte[] b1 = new byte[]{(byte)0x00}; @@ -85,7 +85,7 @@ public class IndexTest extends TestCase { IndexData.BYTE_CODE_COMPARATOR); sortedSet.addAll(expectedList); assertEquals(expectedList, new ArrayList(sortedSet)); - + } public void testPrimaryKey() throws Exception { @@ -98,7 +98,7 @@ public class IndexTest extends TestCase { index.isPrimaryKey()); if(index.isPrimaryKey()) { pkIndex= index; - + } } Map expectedPKs = new HashMap(); @@ -108,7 +108,7 @@ public class IndexTest extends TestCase { assertSame(pkIndex, table.getPrimaryKeyIndex()); } } - + public void testLogicalIndexes() throws Exception { for (final TestDB testDB : TestDB.getSupportedForBasename(Basename.INDEX, true)) { @@ -234,6 +234,8 @@ public class IndexTest extends TestCase { for (final TestDB testDB : TestDB.getSupportedForBasename(Basename.INDEX_PROPERTIES)) { Database db = openCopy(testDB); + db.setEvaluateExpressions(false); + doTestIgnoreNulls(db, "TableIgnoreNulls1"); doTestIgnoreNulls(db, "TableIgnoreNulls2"); @@ -254,7 +256,7 @@ public class IndexTest extends TestCase { temp.addRow(orig.asRow(row)); } - assertEquals(origI.getIndexData().getEntryCount(), + assertEquals(origI.getIndexData().getEntryCount(), tempI.getIndexData().getEntryCount()); Cursor origC = origI.newCursor().toCursor(); @@ -272,7 +274,7 @@ public class IndexTest extends TestCase { Cursor.Position origCurPos = origC.getSavepoint().getCurrentPosition(); Map tempRow = tempC.getCurrentRow(); Cursor.Position tempCurPos = tempC.getSavepoint().getCurrentPosition(); - + assertEquals(origRow, tempRow); assertEquals(IndexCodesTest.entryToString(origCurPos), IndexCodesTest.entryToString(tempCurPos)); @@ -388,7 +390,7 @@ public class IndexTest extends TestCase { final Row row = c.getCurrentRow(); // Row order is arbitrary, so v2007 row order difference is valid - if (testDB.getExpectedFileFormat().ordinal() >= + if (testDB.getExpectedFileFormat().ordinal() >= Database.FileFormat.V2007.ordinal()) { TestUtil.checkTestDBTable1RowA(testDB, table, row); } else { @@ -405,7 +407,7 @@ public class IndexTest extends TestCase { db.close(); } } - + public void testReplId() throws Exception { for (final TestDB testDB : SUPPORTED_DBS_TEST) { @@ -436,8 +438,8 @@ public class IndexTest extends TestCase { assertEquals(1, t.getIndexes().size()); IndexImpl idx = (IndexImpl)t.getIndexes().get(0); - - assertEquals(IndexBuilder.PRIMARY_KEY_NAME, idx.getName()); + + assertEquals(IndexBuilder.PRIMARY_KEY_NAME, idx.getName()); assertEquals(1, idx.getColumns().size()); assertEquals("id", idx.getColumns().get(0).getName()); assertTrue(idx.getColumns().get(0).isAscending()); @@ -459,9 +461,9 @@ public class IndexTest extends TestCase { assertEquals("row" + i, row.get("data")); } assertFalse(c.moveToNextRow()); - } + } } - + public void testIndexCreationSharedData() throws Exception { for (final FileFormat fileFormat : SUPPORTED_FILEFORMATS) { @@ -479,8 +481,8 @@ public class IndexTest extends TestCase { assertEquals(4, t.getIndexes().size()); IndexImpl idx = (IndexImpl)t.getIndexes().get(0); - - assertEquals(IndexBuilder.PRIMARY_KEY_NAME, idx.getName()); + + assertEquals(IndexBuilder.PRIMARY_KEY_NAME, idx.getName()); assertEquals(1, idx.getColumns().size()); assertEquals("id", idx.getColumns().get(0).getName()); assertTrue(idx.getColumns().get(0).isAscending()); @@ -512,7 +514,7 @@ public class IndexTest extends TestCase { assertFalse(c.moveToNextRow()); } } - + public void testGetForeignKeyIndex() throws Exception { for (final TestDB testDB : TestDB.getSupportedForBasename(Basename.INDEX, true)) { @@ -538,12 +540,12 @@ public class IndexTest extends TestCase { assertTrue(t3t1.getReference().isCascadeUpdates()); assertFalse(t3t1.getReference().isCascadeDeletes()); doCheckForeignKeyIndex(t1, t3t1, t3); - + Index t1pk = t1.getIndex(IndexBuilder.PRIMARY_KEY_NAME); assertNotNull(t1pk); assertNull(((IndexImpl)t1pk).getReference()); assertNull(t1pk.getReferencedIndex()); - } + } } public void testConstraintViolation() throws Exception @@ -591,7 +593,7 @@ public class IndexTest extends TestCase { IndexCursor pkCursor = CursorBuilder.createPrimaryKeyCursor(t); assertCursor(expectedRows, pkCursor); - assertCursor(expectedRows, + assertCursor(expectedRows, CursorBuilder.createCursor(t.getIndex("data_ind"))); List batch = new ArrayList(); @@ -614,10 +616,10 @@ public class IndexTest extends TestCase { expectedRows.add(createExpectedRow("id", 6, "data", "row6")); assertTable(expectedRows, t); - + assertCursor(expectedRows, pkCursor); - assertCursor(expectedRows, + assertCursor(expectedRows, CursorBuilder.createCursor(t.getIndex("data_ind"))); pkCursor.findFirstRowByEntry(4); @@ -631,16 +633,16 @@ public class IndexTest extends TestCase { } catch(ConstraintViolationException ce) { // success } - + assertTable(expectedRows, t); - + assertCursor(expectedRows, pkCursor); - assertCursor(expectedRows, + assertCursor(expectedRows, CursorBuilder.createCursor(t.getIndex("data_ind"))); db.close(); - } + } } public void testAutoNumberRecover() throws Exception @@ -667,7 +669,7 @@ public class IndexTest extends TestCase { } catch(ConstraintViolationException ce) { // success } - + t.addRow(null, "row3"); assertEquals(3, t.getRowCount()); @@ -686,7 +688,7 @@ public class IndexTest extends TestCase { IndexCursor pkCursor = CursorBuilder.createPrimaryKeyCursor(t); assertCursor(expectedRows, pkCursor); - assertCursor(expectedRows, + assertCursor(expectedRows, CursorBuilder.createCursor(t.getIndex("data_ind"))); List batch = new ArrayList(); @@ -708,16 +710,16 @@ public class IndexTest extends TestCase { expectedRows.add(createExpectedRow("id", 5, "data", "row5")); assertTable(expectedRows, t); - + assertCursor(expectedRows, pkCursor); - assertCursor(expectedRows, + assertCursor(expectedRows, CursorBuilder.createCursor(t.getIndex("data_ind"))); db.close(); } } - + public void testBinaryIndex() throws Exception { for (final TestDB testDB : TestDB.getSupportedForBasename(Basename.BINARY_INDEX)) { @@ -746,7 +748,7 @@ public class IndexTest extends TestCase { boolean found = false; for(Row idxRow : ic.newEntryIterable(data)) { - + assertTrue(Arrays.equals(data, idxRow.getBytes(colName))); if(id == idxRow.getInt("ID")) { found = true; diff --git a/src/test/java/com/healthmarketscience/jackcess/impl/CalcFieldTest.java b/src/test/java/com/healthmarketscience/jackcess/impl/CalcFieldTest.java index b5afcd3..29ea9ac 100644 --- a/src/test/java/com/healthmarketscience/jackcess/impl/CalcFieldTest.java +++ b/src/test/java/com/healthmarketscience/jackcess/impl/CalcFieldTest.java @@ -68,6 +68,8 @@ public class CalcFieldTest extends TestCase Database db = create(fileFormat); + db.setEvaluateExpressions(false); + Table t = new TableBuilder("Test") .putProperty("awesome_table", true) .addColumn(new ColumnBuilder("id", DataType.LONG) @@ -89,7 +91,7 @@ public class CalcFieldTest extends TestCase assertTrue(col.isCalculated()); assertEquals("[id] & \"_\" & [data]", col.getProperties().getValue( PropertyMap.EXPRESSION_PROP)); - assertEquals(DataType.TEXT.getValue(), + assertEquals(DataType.TEXT.getValue(), col.getProperties().getValue( PropertyMap.RESULT_TYPE_PROP)); @@ -163,7 +165,7 @@ public class CalcFieldTest extends TestCase assertEquals(expectedRows, rows); db.close(); - } + } } } diff --git a/src/test/java/com/healthmarketscience/jackcess/impl/FKEnforcerTest.java b/src/test/java/com/healthmarketscience/jackcess/impl/FKEnforcerTest.java index 2567f12..9f02481 100644 --- a/src/test/java/com/healthmarketscience/jackcess/impl/FKEnforcerTest.java +++ b/src/test/java/com/healthmarketscience/jackcess/impl/FKEnforcerTest.java @@ -63,13 +63,14 @@ public class FKEnforcerTest extends TestCase db.close(); } - + } public void testEnforceForeignKeys() throws Exception { for (final TestDB testDB : TestDB.getSupportedForBasename(Basename.INDEX)) { Database db = openCopy(testDB); + db.setEvaluateExpressions(false); Table t1 = db.getTable("Table1"); Table t2 = db.getTable("Table2"); Table t3 = db.getTable("Table3"); @@ -132,7 +133,7 @@ public class FKEnforcerTest extends TestCase db.close(); } - + } private static Row createT1Row( -- 2.39.5