[ https://issues.apache.org/jira/browse/IGNITE-17663?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Yury Gerzhedovich resolved IGNITE-17663. ---------------------------------------- Resolution: Cannot Reproduce > Apache ignite is giving error when execute a sql query with Top keyword > ----------------------------------------------------------------------- > > Key: IGNITE-17663 > URL: https://issues.apache.org/jira/browse/IGNITE-17663 > Project: Ignite > Issue Type: Bug > Components: cache, sql > Affects Versions: 2.7.6 > Environment: Windows 10 x64, Apache ignite .net, > Reporter: Adnan > Priority: Critical > > * When I execute a simple query on apache ignite it's work fine but when I > execute with the "TOP" keyword it's give error. The query is "SELECT TOP(5) > a.* FROM "Orders".ORDER a WHERE IsOptionTrade=FALSE AND (ACCOUNT IN ('10001', > '10002', '10003'))". > * The method is given below from where error occurs. > * > {{public IEnumerable QueryContinous(string initalquery, string > predicateExpression, string queryKey, ref long seekinfo) { if > (string.IsNullOrEmpty(predicateExpression)) > predicateExpression = "1 == 1"; if > (ListenerLookup.ContainsKey(queryKey)) > { if (predicateExpression == > ListenerLookup[queryKey].PredicateExpr) return > Query(initalquery, ref seekinfo); else { > //Note:Same Client not using Different Versions of Client > logger.Warn($"PredicateExpression:{predicateExpression} is Different from > ListenerLookUp PredicateExpression:{ListenerLookup[queryKey].PredicateExpr}"); > Unsubscribe(queryKey); > } > > } var listener = new Listener(queryKey); > listener.OnUpdate += Listener_OnUpdate; var qry = new > ContinuousQuery(listener) > { > Filter = new RemoteFilter() > { > Query = predicateExpression, > IsWildListener = string.IsNullOrEmpty(predicateExpression) > } > > }; var initialQry = new SqlQuery(typeof(TV), initalquery); > var queryHandle = Cache.QueryContinuous(qry, initialQry);// **At this > point error occurs**var listenerDetails = new ListenerDetails() > \{ > QueryHandle = queryHandle, > listener = listener > > }; > > > listenerDetails.PredicateExpr = predicateExpression; > listenerDetails.Predicate = > System.Linq.Dynamic.Core.DynamicExpressionParser.ParseLambda(ParsingConfig.Default, > true, predicateExpression).Compile(); > > > ListenerLookup.Add(queryKey, listenerDetails); return > createList(queryHandle.GetInitialQueryCursor(), ref seekInfo); > }}} > * {{}} > * {{}} > * This is the error i am getting. > * {{}} > * > {{{} Error Message : Apache.Ignite.Core.Common.IgniteException: Failed to > parse query. Syntax error in SQL statement SELECT TOP 10 A._KEY, TOP 10[*] > A._VAL FROM ""Orders"".""ORDER"" A WHERE ISOPTIONTRADE=FALSE AND ( ACCOUNT > IN ( '10001', '10002', '10003' ) ) ; > SQL statement: SELECT TOP 10 a._KEY, TOP 10 a._VAL FROM "Orders"."ORDER" > a WHERE IsOptionTrade=FALSE AND ( Account IN ( '10001', '10002', '10003' ) > ) [42000-197] ---> Apache.Ignite.Core.Common.JavaException: class > org.apache.ignite.IgniteCheckedException: Failed to parse query. Syntax error > in SQL statement SELECT TOP 10 A._KEY, TOP 10[*] A._VAL FROM > ""Orders"".""ORDER"" A WHERE ISOPTIONTRADE=FALSE AND ( ACCOUNT IN ( > '10001', '10002', '10003' ) ) ; > SQL statement:SELECT TOP 10 a._KEY, TOP 10 a._VAL FROM "Orders"."ORDER" > a WHERE IsOptionTrade=FALSE AND ( Account IN ( '10001', '10002','10003') ) > [42000-197] > at > org.apache.ignite.internal.processors.platform.utils.PlatformUtils.unwrapQueryException(PlatformUtils.java:520) > > at > org.apache.ignite.internal.processors.platform.cache.PlatformCache.runQuery(PlatformCache.java:1242) > > at > org.apache.ignite.internal.processors.platform.cache.PlatformCache.processInStreamOutObject(PlatformCache.java:883) > > at > org.apache.ignite.internal.processors.platform.PlatformTargetProxyImpl.inStreamOutObject(PlatformTargetProxyImpl.java:79) > * Caused by: javax.cache.CacheException: Failed to parse query.Syntax > error in SQL statement SELECT TOP 10 A._KEY, TOP 10[*] A._VAL FROM > ""Orders"".""ORDER"" A WHERE ISOPTIONTRADE=FALSE AND ( ACCOUNT IN ( > '10001', '10002', '10003' ) ) ; > SQL statement: SELECT TOP 10 a._KEY, TOP 10 a._VAL FROM "Orders"."ORDER" > a WHERE IsOptionTrade=FALSE AND ( Account IN ( '10001', '10002', '10003' ) > ) [42000-197] > at > org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.query(IgniteCacheProxyImpl.java:697) > > at > org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.query(GatewayProtectedCacheProxy.java:376) > > at > org.apache.ignite.internal.processors.platform.cache.PlatformCache.runQuery(PlatformCache.java:1236) > ... 2 more > * Caused by: class > org.apache.ignite.internal.processors.query.IgniteSQLException: Failed to > parse query. Syntax error in SQL statement SELECT TOP 10 A._KEY, TOP 10[*] > A._VAL FROM ""Orders"".""ORDER"" A WHERE ISOPTIONTRADE=FALSE AND ( ACCOUNT > IN ( '10001', '10002', '10003' ) ) ; > SQL statement:SELECT TOP 10 a._KEY, TOP 10 a._VAL FROM "Orders"."ORDER" a > WHERE IsOptionTrade=FALSE AND ( Account IN ( '10001', '10002', '10003' ) ) > [42000-197] > at > org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.prepareStatementAndCaches(IgniteH2Indexing.java:2653) > > at > org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.parseAndSplit(IgniteH2Indexing.java:2356) > > at > org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.querySqlFields(IgniteH2Indexing.java:2196) > > at > org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.queryDistributedSql(IgniteH2Indexing.java:1873) > > at > org.apache.ignite.internal.processors.query.GridQueryProcessor$7.applyx(GridQueryProcessor.java:2282) > > at > org.apache.ignite.internal.processors.query.GridQueryProcessor$7.applyx(GridQueryProcessor.java:2280) > > at > org.apache.ignite.internal.util.lang.IgniteOutClosureX.apply(IgniteOutClosureX.java:36) > > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuery(GridQueryProcessor.java:2693) > > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.queryDistributedSql(GridQueryProcessor.java:2279) > > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.querySql(GridQueryProcessor.java:2260) > > at > org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.query(IgniteCacheProxyImpl.java:682) > ... 4 more > * Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement > SELECT TOP 10 A._KEY, TOP 10[*] A._VAL FROM ""Orders"".""ORDER"" A WHERE > ISOPTIONTRADE=FALSE AND ( ACCOUNT IN ( '10001', '10002', '10003' ) ) ; > SQL statement: SELECT TOP 10 a._KEY, TOP 10 a._VAL FROM "Orders"."ORDER" > a WHERE IsOptionTrade=FALSE AND ( Account IN ( '10001', '10002', '10003' ) > ) [42000-197] > at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) > at org.h2.message.DbException.get(DbException.java:179) > at org.h2.message.DbException.get(DbException.java:155) > at org.h2.message.DbException.getSyntaxError(DbException.java:203) > at org.h2.command.Parser.getSyntaxError(Parser.java:548) > at org.h2.command.Parser.prepareCommand(Parser.java:281) > at org.h2.engine.Session.prepareLocal(Session.java:611) > at org.h2.engine.Session.prepareCommand(Session.java:549) > at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1247) > at org.h2.jdbc.JdbcPreparedStatement.(JdbcPreparedStatement.java:76) > at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:694) > at > org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.prepare0(IgniteH2Indexing.java:539) > > at > org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.prepareStatement(IgniteH2Indexing.java:509) > > at > org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.prepareStatement(IgniteH2Indexing.java:476) > > at > org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.prepareStatementAndCaches(IgniteH2Indexing.java:2635) > ... 14 more > at Apache.Ignite.Core.Impl.Unmanaged.Jni.Env.ExceptionCheck() > at Apache.Ignite.Core.Impl.Unmanaged.Jni.Env.CallObjectMethod(GlobalRef > obj, IntPtr methodId, Int64* argsPtr) > at > Apache.Ignite.Core.Impl.Unmanaged.UnmanagedUtils.TargetInStreamOutObject(GlobalRef > target, Int32 opType, Int64 inMemPtr) > at Apache.Ignite.Core.Impl.PlatformJniTarget.InStreamOutObject(Int32 > type, Action`1 writeAction){}}}{{{}{}}} -- This message was sent by Atlassian Jira (v8.20.10#820010)