Exception is thrown when a select expression is used in querybuilder

1,094 views
Skip to first unread message

hemabs

unread,
Sep 30, 2014, 4:14:08 PM9/30/14
to java-dri...@lists.datastax.com

It has options like DISTINCT, COUNT(*), columns that go in select expression
example: SELECT distinct id FROM person;

String[] args1 = new String[]{"distinct id"};
Select selectSt=QueryBuilder.select(args1).from("person");

ResultSet results = session.execute(selectSt);

System.out.println("selectSt::"+selectSt.toString());

When i print the statement I get this string: selectSt::      SELECT "distinct id" FROM person;
Is n't distinct clause supported in select QueryBuilder?
The above code always goes to exception: 
com.datastax.driver.core.exceptions.InvalidQueryException: Undefined name distinct id in selection clause
at com.datastax.driver.core.exceptions.InvalidQueryException.copy(InvalidQueryException.java:35)
at com.datastax.driver.core.DefaultResultSetFuture.extractCauseFromExecutionException(DefaultResultSetFuture.java:256)
at com.datastax.driver.core.DefaultResultSetFuture.getUninterruptibly(DefaultResultSetFuture.java:172)
at com.datastax.driver.core.SessionManager.execute(SessionManager.java:91)
at CassandraSelectApp.main(CassandraSelectApp.java:135)
Caused by: com.datastax.driver.core.exceptions.InvalidQueryException: Undefined name distinct id in selection clause
at com.datastax.driver.core.Responses$Error.asException(Responses.java:96)
at com.datastax.driver.core.DefaultResultSetFuture.onSet(DefaultResultSetFuture.java:108)
at com.datastax.driver.core.RequestHandler.setFinalResult(RequestHandler.java:228)
at com.datastax.driver.core.RequestHandler.onSet(RequestHandler.java:354)
at com.datastax.driver.core.Connection$Dispatcher.messageReceived(Connection.java:571)
at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:75)
at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:792)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296)
at org.jboss.netty.handler.codec.oneone.OneToOneDecoder.handleUpstream(OneToOneDecoder.java:71)
at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:792)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296)
at org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:363)
at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:345)
at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:211)
at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:75)
at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255)
at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:94)
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.processSelectedKeys(AbstractNioWorker.java:372)
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:246)
at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:38)
at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:102)
at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)

Thanks. Appreciate the help.

Olivier Michallat

unread,
Oct 1, 2014, 4:11:20 AM10/1/14
to java-dri...@lists.datastax.com
Hi,

You can't specify "distinct" in the column name, this will literally look for a column named "distinct id" (as you can see in the generated query string). What you want to use instead is:

    select().distinct().column("id").from("person");

I'll admit that the fluent API is a bit lacking here, because if you start with `select("id")`, there is no completion-friendly way to add the DISTINCT afterwards. I've created JAVA-475 to improve that.




To unsubscribe from this group and stop receiving emails from it, send an email to java-driver-us...@lists.datastax.com.

hemabs

unread,
Oct 2, 2014, 2:57:35 PM10/2/14
to java-dri...@lists.datastax.com
Thanks Olivier. Ah, I see that now. Appreciate for having raised the issue.
Reply all
Reply to author
Forward
0 new messages