PA_CR_PA-3.9.X_presto-0.100

Preface

This report covers the following products.

Feature

Status

Notes

Concurrency and Thread Safety


 

Degenerate Schemas

 

Star Schemas


 

Snowflake Schemas


 

Filters


 

Top Count


setMaxRows() is not implemented correctly in the JDBC driver.

Aggregation Tables


Implicit aggregation tables are not recognized by Mondrian. The JDBC driver does not implement java.sql.DatabaseMetaData.getTables

Null Values & Keys


 

Inline Tables


 

Distinct Count


Not all forms of distinct counts are supported, although the minimum support it offers is sufficient for Mondrian.

Grouping Sets


Grouping sets are not supported.

Metadata and data types

The type of certain columns is not reported properly by the JDBC driver.

Connection pooling

Using Apache DBCP causes connections to fail because of an unimplemented method.

Failures

Connection pooling

Symptom

When a connection pool is used, connections will fail. Apache DBCP tries to set the connection's read-only property and this throws an exception from the driver.

Caused by: mondrian.olap.MondrianException: Mondrian Error:Internal error: Error while creating SQL connection: Jdbc=jdbc:presto://localhost:8080/mysql/foodmart; JdbcUser=test; JdbcPassword=test
	at mondrian.resource.MondrianResource$_Def0.ex(MondrianResource.java:977)
	at mondrian.olap.Util.newInternal(Util.java:2404)
	at mondrian.olap.Util.newError(Util.java:2420)
	at mondrian.rolap.RolapConnection.<init>(RolapConnection.java:247)
	at mondrian.rolap.RolapSchema.<init>(RolapSchema.java:189)
	at mondrian.rolap.RolapSchema.<init>(RolapSchema.java:216)
	at mondrian.rolap.RolapSchemaPool.get(RolapSchemaPool.java:215)
	at mondrian.rolap.RolapSchemaPool.get(RolapSchemaPool.java:67)
	at mondrian.rolap.RolapConnection.<init>(RolapConnection.java:161)
	at mondrian.rolap.RolapConnection.<init>(RolapConnection.java:91)
	at mondrian.olap.DriverManager.getConnection(DriverManager.java:114)
	at mondrian.olap.DriverManager.getConnection(DriverManager.java:69)
	at mondrian.olap4j.MondrianOlap4jConnection.<init>(MondrianOlap4jConnection.java:164)
	at mondrian.olap4j.FactoryJdbc4Plus$AbstractConnection.<init>(FactoryJdbc4Plus.java:323)
	at mondrian.olap4j.FactoryJdbc41Impl$MondrianOlap4jConnectionJdbc41.<init>(FactoryJdbc41Impl.java:118)
	at mondrian.olap4j.FactoryJdbc41Impl.newConnection(FactoryJdbc41Impl.java:32)
	at mondrian.olap4j.MondrianOlap4jDriver.connect(MondrianOlap4jDriver.java:134)
	at java.sql.DriverManager.getConnection(DriverManager.java:664)
	at java.sql.DriverManager.getConnection(DriverManager.java:270)
	at org.pentaho.mondrian.tck.MondrianContext$1.load(MondrianContext.java:59)
	at org.pentaho.mondrian.tck.MondrianContext$1.load(MondrianContext.java:1)
	at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3524)
	at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2317)
	at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2280)
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2195)
	... 30 more
Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool exhausted
	at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:103)
	at mondrian.rolap.RolapConnection.<init>(RolapConnection.java:227)
	... 51 more
Caused by: java.util.NoSuchElementException: Could not create a validated object, cause: Disabling read-only mode not supported
	at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:806)
	at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95)
	... 52 more

Top Count

Symptom

TopCount operations are not working. The JDBC driver doesn't enforce the value passed to java.sql.Statement.setMaxRows().

Failed tests

Test

Result

org.pentaho.mondrian.tck.TopCountTest.testSetMaxRows
org.pentaho.mondrian.tck.TopCountTest.testTopCount

The driver doesn't use the value passed to setMaxRows().

java.lang.AssertionError: ResultSet returned more rows than expected
	at org.junit.Assert.fail(Assert.java:88)
	at org.pentaho.mondrian.tck.SqlExpectation.validateRows(SqlExpectation.java:107)
	at org.pentaho.mondrian.tck.SqlExpectation.verify(SqlExpectation.java:64)
	at org.pentaho.mondrian.tck.SqlContext.verify(SqlContext.java:75)
	at org.pentaho.mondrian.tck.TopCountTest.testSetMaxRows(TopCountTest.java:53)

Warnings

Distinct Count

Symptom

Not all forms of distinct count queries are supported. One form of distinct count for multiple columns is supported however, so mondrian can batch the queries as needed. The integration tests have also shown that the dialect is issuing the distinct count queries correctly.

Failed tests

Test

Result

org.pentaho.mondrian.tck.AggregationTest.testCompoundColumnSQL

Cannot batch multiple distinct count columns with the following syntax

Caused by: com.facebook.presto.spi.PrestoException: Unexpected parameters (double, bigint) for function count. Expected: count() , count(T) T
 at com.facebook.presto.metadata.FunctionRegistry.resolveFunction(FunctionRegistry.java:465)
 at com.facebook.presto.metadata.MetadataManager.resolveFunction(MetadataManager.java:148)
 at com.facebook.presto.sql.analyzer.ExpressionAnalyzer$Visitor.visitFunctionCall(ExpressionAnalyzer.java:673)
 at com.facebook.presto.sql.analyzer.ExpressionAnalyzer$Visitor.visitFunctionCall(ExpressionAnalyzer.java:208)
 at com.facebook.presto.sql.tree.FunctionCall.accept(FunctionCall.java:70)

Aggregation Tables

Symptom

The driver's metadata does not provide Mondrian with a list of the available tables. This prevents Mondrian from automatically discovering the available tables. It will howeverwork when the aggregation tables are defined explicitly in the Mondrian schema.

Failed tests

Test

Result

org.pentaho.mondrian.tck.AggregationTablesRecognitionTest.testAggregationRecognition


java.lang.AssertionError: Expected sql was not executed:
select
    sum(agg_c_10_sales_fact_1997.customer_count) m0
from
    agg_c_10_sales_fact_1997 agg_c_10_sales_fact_1997
	at org.junit.Assert.fail(Assert.java:88)
	at org.junit.Assert.assertTrue(Assert.java:41)
	at org.pentaho.mondrian.tck.MondrianExpectation.verifySqls(MondrianExpectation.java:119)
	at org.pentaho.mondrian.tck.MondrianExpectation.verify(MondrianExpectation.java:91)
	at org.pentaho.mondrian.tck.MondrianContext.verify(MondrianContext.java:167)
	at org.pentaho.mondrian.tck.AggregationTablesRecognitionTest$2.run(AggregationTablesRecognitionTest.java:93)
	at org.pentaho.mondrian.tck.PropertyContext.execute(PropertyContext.java:40)
	at org.pentaho.mondrian.tck.AggregationTablesRecognitionTest.testAggregationRecognition(AggregationTablesRecognitionTest.java:77)

Metadata and data types

Symptom

The driver's metadata identifies integer columns as BigInteger objects. This can be worked around by crafting the mondrian schema correctly and forcing the types to those expected.

Failed tests

Test

Result

org.pentaho.mondrian.tck.JoinTest.testTwoWayJoin89


java.lang.AssertionError: Wrong meta type for column warehouse_id, expected meta type 4 but actual meta type was -5 expected:<4> but was:<-5>
	at org.junit.Assert.fail(Assert.java:88)
	at org.junit.Assert.failNotEquals(Assert.java:743)
	at org.junit.Assert.assertEquals(Assert.java:118)
	at org.junit.Assert.assertEquals(Assert.java:555)
	at org.pentaho.mondrian.tck.ResultSetValidator.validateMetaType(ResultSetValidator.java:188)
	at org.pentaho.mondrian.tck.ResultSetValidator.validateRows(ResultSetValidator.java:124)
	at org.pentaho.mondrian.tck.SqlExpectation.verify(SqlExpectation.java:74)
	at org.pentaho.mondrian.tck.SqlContext.verify(SqlContext.java:134)
	at org.pentaho.mondrian.tck.JoinTest.testTwoWayJoin89(JoinTest.java:144)
  • There are numerous other failed tests due to data types.

Grouping sets

Symptom

Queries which use grouping sets are not supported. This is a optimization feature supported by some more advanced databases. It allows to batch cell requests and improve the overall performance.

Failed tests

Test

Result

org.pentaho.mondrian.tck.GroupingSetTest.testEmptyEntry

Grouping set queries are not supported.

select
    customer.gender as gender, sum(sales_fact_1997.store_cost) as sum_cost
from
    time_by_day, sales_fact_1997, customer
where
    (sales_fact_1997.time_id = time_by_day.time_id and time_by_day.the_year = 1997
    and sales_fact_1997.customer_id = customer.customer_id)
group by grouping sets
    ((customer.gender),())

org.pentaho.mondrian.tck.GroupingSetTest.testPlainEntry

Grouping set queries are not supported.

select
    customer.gender as gender, sum(sales_fact_1997.store_cost) as sum_cost
from
    time_by_day, sales_fact_1997, customer
where
    (sales_fact_1997.time_id = time_by_day.time_id and time_by_day.the_year = 1997
    and sales_fact_1997.customer_id = customer.customer_id)
group by grouping sets
    ((customer.gender))

org.pentaho.mondrian.tck.GroupingSetTest.testComplexEntry

Grouping set queries are not supported.

select
    time_by_day.the_year as the_year, customer.gender as gender, sum(sales_fact_1997.store_cost) as sum_cost
from
    time_by_day, sales_fact_1997, customer
where
    (sales_fact_1997.time_id = time_by_day.time_id and time_by_day.the_year = 1997
    and sales_fact_1997.customer_id = customer.customer_id)
group by grouping sets
    ((time_by_day.the_year, customer.gender))

org.pentaho.mondrian.tck.GroupingSetTest.testMultipleEntries

Grouping set queries are not supported.

select
    time_by_day.the_year as the_year, customer.gender as gender, sum(sales_fact_1997.store_cost) as sum_cost
from
    time_by_day, sales_fact_1997, customer
where
    (sales_fact_1997.time_id = time_by_day.time_id and time_by_day.the_year = 1997
    and sales_fact_1997.customer_id = customer.customer_id)
group by grouping sets
    ((time_by_day.the_year, customer.gender), (time_by_day.the_year),())