I tested it with the following connection string: "!connect 
jdbc:optiq:model=/Users/ionut/work/optiq/mongo-zips-model.json;caseSensitive=false
 admin admin" and it's working.

Obviously you will have an error if you connect with the command "!connect 
jdbc:optiq:model=/Users/ionut/work/optiq/mongo-zips-model.json;caseSensitive=true
 admin admin" and you execute a query like: select count(*) from "zips";

Ionut

On Aug 18, 2014, at 9:07 AM, Julian Hyde <[email protected]> wrote:

> I've fixed the code to log all Throwables - see 
> https://issues.apache.org/jira/browse/OPTIQ-377 - hopefully the fix it will 
> make it easier for the next poor soul.
> 
> Can you let me know whether it works to add "caseSensitive=false" to the JDBC 
> URL?
> 
> Julian
> 
> 
> On Aug 17, 2014, at 8:54 AM, Ionut Dobre <[email protected]> wrote:
> 
>> The uncaught error was something like: "ERROR [UnregisteredDriver] 
>> java.lang.NoClassDefFoundError: net/hydromatic/linq4j/QueryProvider".
>> 
>> Ionut
>> 
>> On Aug 17, 2014, at 6:01 PM, Julian Hyde <[email protected]> wrote:
>> 
>>> Great feedback - thanks for your detective work!
>>> 
>>> Do you recall what was the type of the uncaught error? It's not usually
>>> wise to have a 'catch (Throwable)' clause but you've convinced me that it
>>> makes sense here.
>>> 
>>> I'll also looking into creating an 'optiq-all' jar with all dependencies
>>> (except adapter-specific dependencies like MongoDB). It would have made
>>> your job a lot easier.
>>> 
>>> I believe that you can add 'caseSensitive=false' to the jdbc:optiq: connect
>>> string. Then you don't need to change any code.
>>> 
>>> Julian
>>> On Aug 17, 2014 1:19 AM, "Ionut Dobre" <[email protected]> wrote:
>>> 
>>>> Hi All,
>>>> 
>>>> I had the same error as the guys from the old mailing list
>>>> "java.lang.NoClassDefFoundError: Could not initialize class
>>>> net.hydromatic.optiq.jdbc.Driver" (
>>>> https://groups.google.com/forum/#!topic/optiq-dev/RiPFdBstVag) and indeed
>>>> the problem was as someone notice from the UnregisteredDriver.java file, to
>>>> be more precise:
>>>> 
>>>> protected static AvaticaFactory instantiateFactory(String
>>>> factoryClassName) {
>>>>  try {
>>>>    final Class<?> clazz = Class.forName(factoryClassName);
>>>>    return (AvaticaFactory) clazz.newInstance();
>>>>  } catch (ClassNotFoundException e) {
>>>>      logger.error(e);
>>>>  } catch (IllegalAccessException e) {
>>>>      logger.error(e);
>>>>  } catch (InstantiationException e) {
>>>>      logger.error(e);
>>>>  } catch (Exception e) {
>>>>      logger.error(e);
>>>>  }
>>>> 
>>>>    return null;
>>>> }
>>>> 
>>>> (I modified a bit the code and I used something like:
>>>> private static org.apache.log4j.Logger logger =
>>>> org.apache.log4j.Logger.getLogger(UnregisteredDriver.class);
>>>> to see the logs in Tomcat)
>>>> 
>>>> And it was failing without any error message. This was voodoo! And then I
>>>> got the idea to add a new catch at the end:
>>>> 
>>>> catch(Throwable t) {
>>>>      logger.error(t);
>>>>  }
>>>> 
>>>> And indeed, I catch a 'Throwable' and it was failing because of a missing
>>>> class; some of the maven dependencies weren't in the Tomcat path and long
>>>> story short I added the following jars in the
>>>> 'tomcat/webapps/saiku/WEB-INF/lib/' file:
>>>> 
>>>> - linq4j-0.4.jar
>>>> - commons-compiler-2.7.3.jar
>>>> - guava-18.0-rc1.jar
>>>> - jackson-annotations-2.3.0.jar
>>>> - jackson-core-2.3.0.jar
>>>> - jackson-databind-2.1.1.jar
>>>> - janino-2.7.3.jar
>>>> - mongo-java-driver-2.11.1.jar
>>>> 
>>>> Then everything was working, Saiku was connected the mongodb database, but
>>>> Mondrian creates queries like (I omitted the GROUP BY part):
>>>> 
>>>> select "zips"."city" as "c0" from "zips" as "zips" group by "zips"."city";
>>>> 
>>>> And Optiq doesn't validate queries with quotes (queries like: 'select
>>>> zips.city as c0 from zips as zips group by zips.city' are executed), and
>>>> since I was using Mondrian 3.7 I couldn't use '<Schema name="Mongo_Test"
>>>> quoteSql="false">', so I looked for a way to make Optiq ignore the quotes
>>>> and I found that the problem was a flag 'caseSensitive' used in different
>>>> classes (PlannerImpl.java, InternalProperty.java) and the problem started
>>>> in OptiqCatalogReader class in validating table/columns names functions
>>>> ('getTable', 'field').
>>>> 
>>>> And since I was pressured by the time to investigate if I can use Mondrian
>>>> with Mongodb and check the performance I hardcoded caseSensitive to false
>>>> and it worked, I run a MDX query in Saiku against a mongodb test database
>>>> (the famous 'zips' collection).
>>>> 
>>>> Regards,
>>>> Ionut
>> 
> 

Reply via email to