/** Handle SQL query. */ private QueryCursor<Cache.Entry<K, V>> sqlQuery(SqlQuery qry) { Consumer<BinaryOutputStream> qryWriter = out -> { writeCacheInfo(out); serDes.writeObject(out, qry.getType()); serDes.writeObject(out, qry.getSql()); ClientUtils.collection(qry.getArgs(), out, serDes::writeObject); out.writeBoolean(qry.isDistributedJoins()); out.writeBoolean(qry.isLocal()); out.writeBoolean(qry.isReplicatedOnly()); out.writeInt(qry.getPageSize()); out.writeLong(qry.getTimeout()); }; return new ClientQueryCursor<>(new ClientQueryPager<>( ch, ClientOperation.QUERY_SQL, ClientOperation.QUERY_SQL_CURSOR_GET_PAGE, qryWriter, keepBinary, marsh )); }
/** {@inheritDoc} */ @SuppressWarnings("deprecation") @Override public SqlFieldsQuery generateFieldsQuery(String cacheName, SqlQuery qry) { String schemaName = schema(cacheName); String type = qry.getType(); H2TableDescriptor tblDesc = schemaMgr.tableForType(schemaName, cacheName, type); if (tblDesc == null) throw new IgniteSQLException("Failed to find SQL table for type: " + type, IgniteQueryErrorCode.TABLE_NOT_FOUND); String sql; try { sql = H2Utils.generateFieldsQueryString(qry.getSql(), qry.getAlias(), tblDesc); } catch (IgniteCheckedException e) { throw new IgniteException(e); } SqlFieldsQuery res = new SqlFieldsQuery(sql); res.setArgs(qry.getArgs()); res.setDistributedJoins(qry.isDistributedJoins()); res.setLocal(qry.isLocal()); res.setPageSize(qry.getPageSize()); res.setPartitions(qry.getPartitions()); res.setReplicatedOnly(qry.isReplicatedOnly()); res.setSchema(schemaName); res.setSql(sql); res.setDataPageScanEnabled(qry.isDataPageScanEnabled()); if (qry.getTimeout() > 0) res.setTimeout(qry.getTimeout(), TimeUnit.MILLISECONDS); return res; }
/** * @param cctx Cache context. * @param qry Query. * @param keepBinary Keep binary flag. * @return Cursor. */ private <K,V> QueryCursor<Cache.Entry<K,V>> queryDistributedSql(final GridCacheContext<?,?> cctx, final SqlQuery qry, final boolean keepBinary) { checkxEnabled(); if (!busyLock.enterBusy()) throw new IllegalStateException("Failed to execute query (grid is stopping)."); try { final String schemaName = idx.schema(cctx.name()); return executeQuery(GridCacheQueryType.SQL, qry.getSql(), cctx, new IgniteOutClosureX<QueryCursor<Cache.Entry<K, V>>>() { @Override public QueryCursor<Cache.Entry<K, V>> applyx() throws IgniteCheckedException { return idx.queryDistributedSql(schemaName, cctx.name(), qry, keepBinary); } }, true); } catch (IgniteCheckedException e) { throw new IgniteException(e); } finally { busyLock.leaveBusy(); } }
return executeQuery(GridCacheQueryType.SQL, qry.getSql(), cctx, new IgniteOutClosureX<QueryCursor<Cache.Entry<K, V>>>() { @Override public QueryCursor<Cache.Entry<K, V>> applyx() throws IgniteCheckedException {
final SqlQuery qry, final IndexingQueryFilter filter, final boolean keepBinary) throws IgniteCheckedException { String type = qry.getType(); String sqlQry = qry.getSql(); String alias = qry.getAlias(); Object[] params = qry.getArgs();
sql = generateQuery(qry.getSql(), qry.getAlias(), tblDesc);
/** Handle SQL query. */ private QueryCursor<Cache.Entry<K, V>> sqlQuery(SqlQuery qry) { Consumer<BinaryOutputStream> qryWriter = out -> { writeCacheInfo(out); serDes.writeObject(out, qry.getType()); serDes.writeObject(out, qry.getSql()); ClientUtils.collection(qry.getArgs(), out, serDes::writeObject); out.writeBoolean(qry.isDistributedJoins()); out.writeBoolean(qry.isLocal()); out.writeBoolean(qry.isReplicatedOnly()); out.writeInt(qry.getPageSize()); out.writeLong(qry.getTimeout()); }; return new ClientQueryCursor<>(new ClientQueryPager<>( ch, ClientOperation.QUERY_SQL, ClientOperation.QUERY_SQL_CURSOR_GET_PAGE, qryWriter, keepBinary, marsh )); }