You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metamodel.apache.org by ka...@apache.org on 2014/04/04 10:53:41 UTC

[1/2] git commit: METAMODEL-47: Fixed

Repository: incubator-metamodel
Updated Branches:
  refs/heads/master f6b3373ea -> 7e4d0b984


METAMODEL-47: Fixed

Project: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/commit/2648a4f1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/tree/2648a4f1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/diff/2648a4f1

Branch: refs/heads/master
Commit: 2648a4f15650458a9c6d8450ef294a1185087f8a
Parents: 828c82d
Author: Kasper Sørensen <i....@gmail.com>
Authored: Fri Apr 4 10:50:13 2014 +0200
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Fri Apr 4 10:50:13 2014 +0200

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../metamodel/data/RowPublisherDataSet.java     |  7 +-
 .../excel/DefaultSpreadsheetReaderDelegate.java |  2 -
 .../metamodel/excel/ExcelDataContext.java       |  4 ++
 .../excel/XlsxSpreadsheetReaderDelegate.java    |  2 -
 .../metamodel/excel/ExcelDataContextTest.java   | 72 +++++++++++++-------
 6 files changed, 58 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/2648a4f1/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 764599c..6e0f69d 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -4,6 +4,7 @@
  * [METAMODEL-13] - Added support for Apache HBase via the new module "MetaModel-hbase"!
  * [METAMODEL-11] - New module "MetaModel-spring" which adds a convenient FactoryBean to produce various types of DataContext objects based on externalizable parameters, for Spring framework users.
  * [METAMODEL-32] - Fixed thread-safety issue in Excel module when tables (sheets) metadata is updated.
+ * [METAMODEL-47] - Fixed issue in Excel of loading schema if query is fired based on metadata from a previous DataContext instance.
  * [METAMODEL-35] - Improved query rewriting for DB2 when paged queries contain ORDER BY clause.
  * [METAMODEL-44] - Added an optional method for QueryPostprocessDataContext implementations to do a row-lookup by primary key value.
  * [METAMODEL-43] - Made CSV datastores skip empty lines in file instead of treating them of rows with null values.

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/2648a4f1/core/src/main/java/org/apache/metamodel/data/RowPublisherDataSet.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/data/RowPublisherDataSet.java b/core/src/main/java/org/apache/metamodel/data/RowPublisherDataSet.java
index 8717136..47f0325 100644
--- a/core/src/main/java/org/apache/metamodel/data/RowPublisherDataSet.java
+++ b/core/src/main/java/org/apache/metamodel/data/RowPublisherDataSet.java
@@ -30,8 +30,6 @@ import org.slf4j.LoggerFactory;
  * instead allows a publshing action to publish rows to the dataset in a
  * blocking manner, and thereby to adapt without having to load all rows into
  * memory.
- * 
- * @author Kasper Sørensen
  */
 public final class RowPublisherDataSet extends AbstractDataSet {
 
@@ -59,7 +57,10 @@ public final class RowPublisherDataSet extends AbstractDataSet {
 	public void close() {
 		super.close();
 		_closed = true;
-		_rowPublisher.finished();
+		if (_rowPublisher != null) {
+		    _rowPublisher.finished();
+		    _rowPublisher = null;
+		}
 	}
 
 	@Override

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/2648a4f1/excel/src/main/java/org/apache/metamodel/excel/DefaultSpreadsheetReaderDelegate.java
----------------------------------------------------------------------
diff --git a/excel/src/main/java/org/apache/metamodel/excel/DefaultSpreadsheetReaderDelegate.java b/excel/src/main/java/org/apache/metamodel/excel/DefaultSpreadsheetReaderDelegate.java
index 48a96f3..c1e2015 100644
--- a/excel/src/main/java/org/apache/metamodel/excel/DefaultSpreadsheetReaderDelegate.java
+++ b/excel/src/main/java/org/apache/metamodel/excel/DefaultSpreadsheetReaderDelegate.java
@@ -43,8 +43,6 @@ import org.slf4j.LoggerFactory;
 /**
  * The default {@link SpreadsheetReaderDelegate}, which uses POI's main user
  * model to read spreadsheets: the Workbook class.
- * 
- * @author Kasper Sørensen
  */
 final class DefaultSpreadsheetReaderDelegate implements SpreadsheetReaderDelegate {
 

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/2648a4f1/excel/src/main/java/org/apache/metamodel/excel/ExcelDataContext.java
----------------------------------------------------------------------
diff --git a/excel/src/main/java/org/apache/metamodel/excel/ExcelDataContext.java b/excel/src/main/java/org/apache/metamodel/excel/ExcelDataContext.java
index f29f86b..26a64c7 100644
--- a/excel/src/main/java/org/apache/metamodel/excel/ExcelDataContext.java
+++ b/excel/src/main/java/org/apache/metamodel/excel/ExcelDataContext.java
@@ -147,6 +147,10 @@ public final class ExcelDataContext extends QueryPostprocessDataContext implemen
         try {
             SpreadsheetReaderDelegate delegate = getSpreadsheetReaderDelegate(inputStreamRef);
             inputStream = inputStreamRef.get();
+            
+            // METAMODEL-47: Ensure that we have loaded the schema at this point
+            getDefaultSchema();
+            
             DataSet dataSet = delegate.executeQuery(inputStream, table, columns, maxRows);
             return dataSet;
         } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/2648a4f1/excel/src/main/java/org/apache/metamodel/excel/XlsxSpreadsheetReaderDelegate.java
----------------------------------------------------------------------
diff --git a/excel/src/main/java/org/apache/metamodel/excel/XlsxSpreadsheetReaderDelegate.java b/excel/src/main/java/org/apache/metamodel/excel/XlsxSpreadsheetReaderDelegate.java
index d2e0e98..810330d 100644
--- a/excel/src/main/java/org/apache/metamodel/excel/XlsxSpreadsheetReaderDelegate.java
+++ b/excel/src/main/java/org/apache/metamodel/excel/XlsxSpreadsheetReaderDelegate.java
@@ -50,8 +50,6 @@ import org.xml.sax.XMLReader;
  * {@link SpreadsheetReaderDelegate} implementation for the "new" XLSX format.
  * This implementation is very efficient as it uses SAX XML parsing which does
  * not bloat memory usage in the same way that POI's user model does.
- * 
- * @author Kasper Sørensen
  */
 final class XlsxSpreadsheetReaderDelegate implements SpreadsheetReaderDelegate {
 

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/2648a4f1/excel/src/test/java/org/apache/metamodel/excel/ExcelDataContextTest.java
----------------------------------------------------------------------
diff --git a/excel/src/test/java/org/apache/metamodel/excel/ExcelDataContextTest.java b/excel/src/test/java/org/apache/metamodel/excel/ExcelDataContextTest.java
index 010dd03..f553ddf 100644
--- a/excel/src/test/java/org/apache/metamodel/excel/ExcelDataContextTest.java
+++ b/excel/src/test/java/org/apache/metamodel/excel/ExcelDataContextTest.java
@@ -85,8 +85,8 @@ public class ExcelDataContextTest extends TestCase {
     }
 
     public void testUnexistingHeaderLine() throws Exception {
-        DataContext dc = new ExcelDataContext(new File("src/test/resources/xls_people.xls"), new ExcelConfiguration(20, true,
-                false));
+        DataContext dc = new ExcelDataContext(new File("src/test/resources/xls_people.xls"), new ExcelConfiguration(20,
+                true, false));
         assertEquals(1, dc.getDefaultSchema().getTableCount());
 
         Table table = dc.getDefaultSchema().getTables()[0];
@@ -163,8 +163,8 @@ public class ExcelDataContextTest extends TestCase {
 
         assertTrue(ds.next());
         row = ds.getRow();
-        assertEquals("TismmerswerskisMFSTLandsmeers                                                          ", row.getValue(0)
-                .toString());
+        assertEquals("TismmerswerskisMFSTLandsmeers                                                          ", row
+                .getValue(0).toString());
 
         assertTrue(ds.next());
         row = ds.getRow();
@@ -172,8 +172,8 @@ public class ExcelDataContextTest extends TestCase {
 
         assertTrue(ds.next());
         row = ds.getRow();
-        assertEquals("TismmerswerskisMFSTLandsmeers                                                          ", row.getValue(0)
-                .toString());
+        assertEquals("TismmerswerskisMFSTLandsmeers                                                          ", row
+                .getValue(0).toString());
 
         assertFalse(ds.next());
         ds.close();
@@ -185,7 +185,8 @@ public class ExcelDataContextTest extends TestCase {
         Table table = dc.getDefaultSchema().getTables()[0];
         Column[] columns = table.getColumns();
 
-        assertEquals("[some number, some mixed formula, some int only formula]", Arrays.toString(table.getColumnNames()));
+        assertEquals("[some number, some mixed formula, some int only formula]",
+                Arrays.toString(table.getColumnNames()));
 
         Query q = dc.query().from(table).select(columns).toQuery();
         DataSet ds = dc.executeQuery(q);
@@ -294,7 +295,8 @@ public class ExcelDataContextTest extends TestCase {
 
     public void testConfigurationWithoutHeader() throws Exception {
         File file = new File("src/test/resources/xls_people.xls");
-        DataContext dc = new ExcelDataContext(file, new ExcelConfiguration(ExcelConfiguration.NO_COLUMN_NAME_LINE, true, true));
+        DataContext dc = new ExcelDataContext(file, new ExcelConfiguration(ExcelConfiguration.NO_COLUMN_NAME_LINE,
+                true, true));
         Table table = dc.getDefaultSchema().getTables()[0];
 
         String[] columnNames = table.getColumnNames();
@@ -516,10 +518,10 @@ public class ExcelDataContextTest extends TestCase {
         Table table = schema.getTableByName("Sheet1");
         assertEquals(
 
-        "[Column[name=Pkg No.,columnNumber=0,type=VARCHAR,nullable=true,nativeType=null,columnSize=null], "
-                + "Column[name=Description,columnNumber=1,type=VARCHAR,nullable=true,nativeType=null,columnSize=null], "
-                + "Column[name=Room,columnNumber=2,type=VARCHAR,nullable=true,nativeType=null,columnSize=null], "
-                + "Column[name=Level,columnNumber=3,type=VARCHAR,nullable=true,nativeType=null,columnSize=null]]",
+                "[Column[name=Pkg No.,columnNumber=0,type=VARCHAR,nullable=true,nativeType=null,columnSize=null], "
+                        + "Column[name=Description,columnNumber=1,type=VARCHAR,nullable=true,nativeType=null,columnSize=null], "
+                        + "Column[name=Room,columnNumber=2,type=VARCHAR,nullable=true,nativeType=null,columnSize=null], "
+                        + "Column[name=Level,columnNumber=3,type=VARCHAR,nullable=true,nativeType=null,columnSize=null]]",
                 Arrays.toString(table.getColumns()));
     }
 
@@ -542,7 +544,8 @@ public class ExcelDataContextTest extends TestCase {
             public void run(UpdateCallback cb) {
                 Style clownStyle = new StyleBuilder().bold().foreground(255, 0, 0).background(0, 0, 255).create();
 
-                Style thirtyStyle = new StyleBuilder().italic().underline().centerAligned().foreground(10, 10, 200).create();
+                Style thirtyStyle = new StyleBuilder().italic().underline().centerAligned().foreground(10, 10, 200)
+                        .create();
 
                 cb.insertInto(table).value("id", 1000).value(nameColumn, "pennywise the [clown]", clownStyle)
                         .value("gender", "male").value("age", 30, thirtyStyle).execute();
@@ -566,7 +569,8 @@ public class ExcelDataContextTest extends TestCase {
         assertEquals("mike", ds.getRow().getValue(0).toString());
         assertTrue(ds.next());
         assertEquals("pennywise the [clown]", ds.getRow().getValue(0).toString());
-        assertEquals("font-weight: bold;color: rgb(255,0,0);background-color: rgb(0,0,255);", ds.getRow().getStyle(0).toString());
+        assertEquals("font-weight: bold;color: rgb(255,0,0);background-color: rgb(0,0,255);", ds.getRow().getStyle(0)
+                .toString());
         assertTrue(ds.next());
         assertEquals("peter", ds.getRow().getValue(0).toString());
         assertTrue(ds.next());
@@ -577,8 +581,8 @@ public class ExcelDataContextTest extends TestCase {
         ds = dc.query().from(table).select("age").where("age").eq(30).execute();
         assertTrue(ds.next());
         assertEquals("30", ds.getRow().getValue(0));
-        assertEquals("font-style: italic;text-decoration: underline;text-align: center;color: rgb(0,0,255);", ds.getRow()
-                .getStyle(0).toCSS());
+        assertEquals("font-style: italic;text-decoration: underline;text-align: center;color: rgb(0,0,255);", ds
+                .getRow().getStyle(0).toCSS());
         assertFalse(ds.next());
     }
 
@@ -598,15 +602,15 @@ public class ExcelDataContextTest extends TestCase {
             @Override
             public void run(UpdateCallback cb) {
                 Schema schema = dc.getDefaultSchema();
-                Table table1 = cb.createTable(schema, "my_table_1").withColumn("foo").withColumn("bar").withColumn("baz")
-                        .execute();
+                Table table1 = cb.createTable(schema, "my_table_1").withColumn("foo").withColumn("bar")
+                        .withColumn("baz").execute();
 
                 assertEquals(1, schema.getTableCount());
                 assertSame(table1.getSchema(), schema);
                 assertSame(table1, schema.getTables()[0]);
 
-                Table table2 = cb.createTable(schema, "my_table_2").withColumn("foo").withColumn("bar").withColumn("baz")
-                        .execute();
+                Table table2 = cb.createTable(schema, "my_table_2").withColumn("foo").withColumn("bar")
+                        .withColumn("baz").execute();
 
                 assertSame(table2.getSchema(), schema);
                 assertSame(table2, schema.getTables()[1]);
@@ -626,7 +630,7 @@ public class ExcelDataContextTest extends TestCase {
             @Override
             public void run(UpdateCallback cb) {
                 cb.insertInto(dc.getTableByQualifiedLabel("my_table_1")).value("foo", 456.2)
-                .value("bar", "парфюмерия +и косметика").value("baz", false).execute();
+                        .value("bar", "парфюмерия +и косметика").value("baz", false).execute();
             }
         });
 
@@ -655,8 +659,9 @@ public class ExcelDataContextTest extends TestCase {
             }
         });
 
-        assertEquals("1", MetaModelHelper.executeSingleRowQuery(dc, dc.query().from("my_table_1").selectCount().toQuery())
-                .getValue(0).toString());
+        assertEquals("1",
+                MetaModelHelper.executeSingleRowQuery(dc, dc.query().from("my_table_1").selectCount().toQuery())
+                        .getValue(0).toString());
 
         ds = dc.query().from("my_table_1").select("foo").and("bar").and("baz").execute();
         assertTrue(ds.next());
@@ -738,4 +743,25 @@ public class ExcelDataContextTest extends TestCase {
 
         assertFalse(ds.next());
     }
+
+    /**
+     * Tests that you can execute a query on a ExcelDataContext even though the
+     * schema has not yet been (explicitly) loaded.
+     */
+    public void testExecuteQueryBeforeLoadingSchema() throws Exception {
+        // first use one DataContext to retreive the schema/table/column objects
+        ExcelDataContext dc1 = new ExcelDataContext(new File("src/test/resources/Spreadsheet2007.xlsx"));
+        Schema schema = dc1.getDefaultSchema();
+        Table table = schema.getTable(0);
+        Column column = table.getColumn(0);
+
+        // query another DataContext using the schemas of the one above
+        ExcelDataContext dc2 = new ExcelDataContext(new File("src/test/resources/Spreadsheet2007.xlsx"));
+        DataSet ds = dc2.executeQuery(new Query().from(table).select(column));
+
+        // previously we would crash at this point!
+
+        assertNotNull(ds);
+        ds.close();
+    }
 }
\ No newline at end of file


[2/2] git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-metamodel.git into METAMODEL-47

Posted by ka...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-metamodel.git into METAMODEL-47

Project: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/commit/7e4d0b98
Tree: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/tree/7e4d0b98
Diff: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/diff/7e4d0b98

Branch: refs/heads/master
Commit: 7e4d0b984fda798d6157672f049a4409e4435930
Parents: 2648a4f f6b3373
Author: Kasper Sørensen <i....@gmail.com>
Authored: Fri Apr 4 10:51:09 2014 +0200
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Fri Apr 4 10:51:09 2014 +0200

----------------------------------------------------------------------
 README                                          |  6 +-
 .../metamodel/couchdb/CouchDbDataContext.java   | 34 ++++++---
 .../couchdb/CouchDbDataContextTest.java         | 16 ++---
 ...del-integrationtest-configuration.properties | 31 ++++++++
 .../metamodel/hbase/HBaseDataContextTest.java   | 28 ++++----
 .../apache/metamodel/hbase/HBaseTestCase.java   | 74 ++++++++++++++++++++
 pom.xml                                         |  1 +
 .../salesforce/SalesforceTestCase.java          | 17 +++--
 .../metamodel/sugarcrm/SugarCrmTestCase.java    | 18 +++--
 9 files changed, 181 insertions(+), 44 deletions(-)
----------------------------------------------------------------------