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/08/09 22:02:03 UTC

git commit: METAMODEL-74: Made unittest to recreate scenario - not reproduced!

Repository: incubator-metamodel
Updated Branches:
  refs/heads/master fc30f4801 -> abba05218


METAMODEL-74: Made unittest to recreate scenario - not reproduced!

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

Branch: refs/heads/master
Commit: abba052183d6e097edc57f59e604d19caaa037d2
Parents: fc30f48
Author: Kasper Sørensen <i....@gmail.com>
Authored: Sat Aug 9 22:00:53 2014 +0200
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Sat Aug 9 22:00:53 2014 +0200

----------------------------------------------------------------------
 .../query/builder/SatisfiedFromBuilder.java     |  4 +-
 .../builder/SatisfiedFromBuilderCallback.java   |  7 +++
 .../query/builder/TableFromBuilder.java         |  1 +
 .../QueryPostprocessDataContextTest.java        | 65 +++++++++++++++++++-
 4 files changed, 74 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/abba0521/core/src/main/java/org/apache/metamodel/query/builder/SatisfiedFromBuilder.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/query/builder/SatisfiedFromBuilder.java b/core/src/main/java/org/apache/metamodel/query/builder/SatisfiedFromBuilder.java
index f51bd2a..92aa278 100644
--- a/core/src/main/java/org/apache/metamodel/query/builder/SatisfiedFromBuilder.java
+++ b/core/src/main/java/org/apache/metamodel/query/builder/SatisfiedFromBuilder.java
@@ -25,8 +25,6 @@ import org.apache.metamodel.schema.Table;
 /**
  * Represents a builder where the FROM part is satisfied, ie. a SELECT clause is
  * now buildable.
- * 
- * @author Kasper Sørensen
  */
 public interface SatisfiedFromBuilder {
 
@@ -37,6 +35,8 @@ public interface SatisfiedFromBuilder {
     public TableFromBuilder and(String tableName);
 
     public ColumnSelectBuilder<?> select(Column column);
+    
+    public SatisfiedQueryBuilder<?> select(FunctionType functionType, String columnName);
 
     public FunctionSelectBuilder<?> select(FunctionType functionType, Column column);
 

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/abba0521/core/src/main/java/org/apache/metamodel/query/builder/SatisfiedFromBuilderCallback.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/query/builder/SatisfiedFromBuilderCallback.java b/core/src/main/java/org/apache/metamodel/query/builder/SatisfiedFromBuilderCallback.java
index 3e58119..e142a79 100644
--- a/core/src/main/java/org/apache/metamodel/query/builder/SatisfiedFromBuilderCallback.java
+++ b/core/src/main/java/org/apache/metamodel/query/builder/SatisfiedFromBuilderCallback.java
@@ -71,6 +71,13 @@ abstract class SatisfiedFromBuilderCallback extends BaseObject implements Satisf
         GroupedQueryBuilder queryBuilder = new GroupedQueryBuilderImpl(dataContext, query);
         return new SatisfiedSelectBuilderImpl(queryBuilder);
     }
+    
+    @Override
+    public SatisfiedQueryBuilder<?> select(FunctionType functionType, String columnName) {
+        GroupedQueryBuilderImpl queryBuilder = new GroupedQueryBuilderImpl(dataContext, query);
+        Column column = queryBuilder.findColumn(columnName);
+        return select(functionType, column);
+    }
 
     @Override
     public FunctionSelectBuilder<?> select(FunctionType functionType, Column column) {

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/abba0521/core/src/main/java/org/apache/metamodel/query/builder/TableFromBuilder.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/query/builder/TableFromBuilder.java b/core/src/main/java/org/apache/metamodel/query/builder/TableFromBuilder.java
index 15fb80b..18554e5 100644
--- a/core/src/main/java/org/apache/metamodel/query/builder/TableFromBuilder.java
+++ b/core/src/main/java/org/apache/metamodel/query/builder/TableFromBuilder.java
@@ -36,4 +36,5 @@ public interface TableFromBuilder extends
 	public JoinFromBuilder rightJoin(String tableName);
 
 	public TableFromBuilder as(String alias);
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/abba0521/core/src/test/java/org/apache/metamodel/QueryPostprocessDataContextTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/metamodel/QueryPostprocessDataContextTest.java b/core/src/test/java/org/apache/metamodel/QueryPostprocessDataContextTest.java
index 0001918..72cd8c2 100644
--- a/core/src/test/java/org/apache/metamodel/QueryPostprocessDataContextTest.java
+++ b/core/src/test/java/org/apache/metamodel/QueryPostprocessDataContextTest.java
@@ -69,6 +69,68 @@ public class QueryPostprocessDataContextTest extends MetaModelTestCase {
                 .execute());
     }
 
+    public void testApplyFunctionToNullValues() throws Exception {
+        QueryPostprocessDataContext dataContext = new QueryPostprocessDataContext() {
+            @Override
+            public DataSet materializeMainSchemaTable(Table table, Column[] columns, int maxRows) {
+                if (table == table1) {
+                    Column[] columns1 = table1.getColumns();
+                    SelectItem[] selectItems = new SelectItem[columns1.length];
+                    for (int i = 0; i < selectItems.length; i++) {
+                        SelectItem selectItem = new SelectItem(columns1[i]);
+                        selectItems[i] = selectItem;
+                    }
+                    List<Object[]> data = new ArrayList<Object[]>();
+                    data.add(new Object[] { 1, "no nulls", 1 });
+                    data.add(new Object[] { 2, "onlynull", null });
+                    data.add(new Object[] { 3, "mixed", null });
+                    data.add(new Object[] { 4, "mixed", 2 });
+                    if (maxRows != -1) {
+                        for (int i = data.size() - 1; i >= maxRows; i--) {
+                            data.remove(i);
+                        }
+                    }
+                    return createDataSet(selectItems, data);
+                }
+                throw new IllegalArgumentException("This test only accepts table1 and table2");
+            }
+
+            @Override
+            protected String getMainSchemaName() throws MetaModelException {
+                return schema.getName();
+            }
+
+            @Override
+            protected Schema getMainSchema() throws MetaModelException {
+                return schema;
+            }
+        };
+
+        DataSet dataSet = dataContext.query().from(TABLE_CONTRIBUTOR)
+                .select(FunctionType.SUM, COLUMN_CONTRIBUTOR_COUNTRY).select(COLUMN_CONTRIBUTOR_NAME)
+                .groupBy(COLUMN_CONTRIBUTOR_NAME).execute();
+        assertTrue(dataSet.next());
+        assertEquals("Row[values=[1.0, no nulls]]", dataSet.getRow().toString());
+        assertTrue(dataSet.next());
+        assertEquals("Row[values=[2.0, mixed]]", dataSet.getRow().toString());
+        assertTrue(dataSet.next());
+        assertEquals("Row[values=[0.0, onlynull]]", dataSet.getRow().toString());
+        assertFalse(dataSet.next());
+        dataSet.close();
+    }
+
+    public void testGroupByNulls() throws Exception {
+        MockDataContext dc = new MockDataContext("sch", "tab", null);
+        Table table = dc.getDefaultSchema().getTables()[0];
+        DataSet dataSet = dc.query().from(table).select(FunctionType.SUM, "foo").select("baz").groupBy("baz").execute();
+        assertTrue(dataSet.next());
+        assertEquals("Row[values=[7.0, world]]", dataSet.getRow().toString());
+        assertTrue(dataSet.next());
+        assertEquals("Row[values=[3.0, null]]", dataSet.getRow().toString());
+        assertFalse(dataSet.next());
+        dataSet.close();
+    }
+
     public void testAggregateQueryWhereClauseExcludingAll() throws Exception {
         MockDataContext dc = new MockDataContext("sch", "tab", "1");
         assertSingleRowResult("Row[values=[0]]",
@@ -880,7 +942,8 @@ public class QueryPostprocessDataContextTest extends MetaModelTestCase {
             }
 
             @Override
-            protected Row executePrimaryKeyLookupQuery(Table table, List<SelectItem> selectItems, Column primaryKeyColumn, Object keyValue) {
+            protected Row executePrimaryKeyLookupQuery(Table table, List<SelectItem> selectItems,
+                    Column primaryKeyColumn, Object keyValue) {
                 assertEquals("foo", keyValue);
                 return new DefaultRow(new SimpleDataSetHeader(selectItems), new Object[] { "hello world" });
             }