/** {@inheritDoc} */ @Override public SqlFieldsQueryEx setPageSize(int pageSize) { super.setPageSize(pageSize); return this; }
/** * Make a copy of {@link SqlFieldsQuery} with all flags and preserving type. * @param oldQry Query to copy. * @return Query copy. */ private SqlFieldsQuery cloneFieldsQuery(SqlFieldsQuery oldQry) { return oldQry.copy().setLocal(oldQry.isLocal()).setPageSize(oldQry.getPageSize()); }
/** * Test metrics for SQL cross cache queries. * * @throws Exception In case of error. */ @Test public void testSqlFieldsQueryHistoryCrossCacheQueryNotFullyFetched() throws Exception { SqlFieldsQuery qry = new SqlFieldsQuery("select * from \"B\".String"); qry.setPageSize(10); checkQueryNotFullyFetchedMetrics(qry, false); }
/** * Test metrics for SQL fields queries. * * @throws Exception In case of error. */ @Test public void testSqlFieldsQueryHistoryNotFullyFetched() throws Exception { SqlFieldsQuery qry = new SqlFieldsQuery("select * from String"); qry.setPageSize(10); checkQueryNotFullyFetchedMetrics(qry, false); }
@Override public void applyx() throws IgniteCheckedException { int iter = 0; while (!done.get() && !Thread.currentThread().isInterrupted()) { iter++; List<List<?>> entries = c.query(new SqlFieldsQuery("SELECT * from TestValue").setPageSize(100)).getAll(); assert entries != null; assertEquals("Entries count is not as expected on iteration: " + iter, keyCnt, entries.size()); if (cnt.incrementAndGet() % logMod == 0) { GridCacheQueryManager<Object, Object> qryMgr = ((IgniteKernal)g).internalCache(DEFAULT_CACHE_NAME).context().queries(); assert qryMgr != null; qryMgr.printMemoryStats(); } } } }, threadCnt);
SqlFieldsQuery qry = new SqlFieldsQuery(bldr.toString()).setPageSize(100);
/** * @throws Exception If failed. */ @Test public void testPaginationIterator() throws Exception { QueryCursor<List<?>> qry = intCache.query(sqlFieldsQuery("select _key, _val from Integer").setPageSize(10)); int cnt = 0; for (List<?> row : qry) { assertEquals(2, row.size()); assertEquals(row.get(0), row.get(1)); assertTrue((Integer)row.get(0) >= 0 && (Integer)row.get(0) < 200); cnt++; } int size = 200; assertEquals(size, cnt); }
/** * @throws Exception If failed. */ @Test public void testPaginationGet() throws Exception { QueryCursor<List<?>> qry = intCache.query(sqlFieldsQuery("select _key, _val from Integer").setPageSize(10)); List<List<?>> list = new ArrayList<>(qry.getAll()); dedup(list); Collections.sort(list, new Comparator<List<?>>() { @Override public int compare(List<?> r1, List<?> r2) { return ((Integer)r1.get(0)).compareTo((Integer)r2.get(0)); } }); for (int i = 0; i < 200; i++) { List<?> row = list.get(i); assertEquals(i, row.get(0)); assertEquals(i, row.get(1)); } }
/** @throws Exception If failed. */ @Test public void testPagination() throws Exception { // Query with page size 20. QueryCursor<List<?>> qry = intCache.query(sqlFieldsQuery("select * from Integer").setPageSize(20)); List<List<?>> res = new ArrayList<>(qry.getAll()); dedup(res); Collections.sort(res, new Comparator<List<?>>() { @Override public int compare(List<?> r1, List<?> r2) { return ((Integer)r1.get(0)).compareTo((Integer)r2.get(0)); } }); assertEquals(200, res.size()); for (List<?> row : res) assertEquals("Wrong row size: " + row, 2, row.size()); }
/** @throws Exception If failed. */ @Test public void testPaginationIteratorKeepAll() throws Exception { QueryCursor<List<?>> qry = intCache.query(sqlFieldsQuery("select _key, _val from Integer").setPageSize(10)); int cnt = 0; for (List<?> row : qry) { assertEquals(2, row.size()); assertEquals(row.get(0), row.get(1)); assertTrue((Integer)row.get(0) >= 0 && (Integer)row.get(0) < 200); cnt++; } int size = 200; assertEquals(size, cnt); qry = intCache.query(sqlFieldsQuery("select _key, _val from Integer").setPageSize(10)); List<List<?>> list = new ArrayList<>(qry.getAll()); dedup(list); Collections.sort(list, new Comparator<List<?>>() { @Override public int compare(List<?> r1, List<?> r2) { return ((Integer)r1.get(0)).compareTo((Integer)r2.get(0)); } }); for (int i = 0; i < 200; i++) { List<?> r = list.get(i); assertEquals(i, r.get(0)); assertEquals(i, r.get(1)); } }
/** * Test metrics for SQL cross cache queries. * * @throws Exception In case of error. */ @Test public void testSqlFieldsCrossCacheQueryNotFullyFetchedMetrics() throws Exception { IgniteCache<Integer, String> cache = grid(0).context().cache().jcache("A"); SqlFieldsQuery qry = new SqlFieldsQuery("select * from \"B\".String"); qry.setPageSize(10); checkQueryNotFullyFetchedMetrics(cache, qry, false); }
/** * Test metrics for SQL fields queries. * * @throws Exception In case of error. */ @Test public void testSqlFieldsQueryNotFullyFetchedMetrics() throws Exception { IgniteCache<Integer, String> cache = grid(0).context().cache().jcache("A"); SqlFieldsQuery qry = new SqlFieldsQuery("select * from String"); qry.setPageSize(10); checkQueryNotFullyFetchedMetrics(cache, qry, false); }
/** * Test metrics for SQL cross cache queries. * * @throws Exception In case of error. */ @Test public void testSqlFieldsCrossCacheQueryNotFullyFetchedMetrics() throws Exception { IgniteCache<Integer, String> cache = grid(0).context().cache().jcache("A"); SqlFieldsQuery qry = new SqlFieldsQuery("select * from \"B\".String"); qry.setPageSize(10); checkQueryNotFullyFetchedMetrics(cache, qry, false); }
/** * Test metrics for SQL fields queries. * * @throws Exception In case of error. */ @Test public void testSqlFieldsQueryNotFullyFetchedMetrics() throws Exception { IgniteCache<Integer, String> cache = grid(0).context().cache().jcache("A"); SqlFieldsQuery qry = new SqlFieldsQuery("select * from String"); qry.setPageSize(10); checkQueryNotFullyFetchedMetrics(cache, qry, false); }
/** * @param cacheName Cache name. * @param outsideTx Whether select is executed outside transaction * @throws Exception If failed. */ void doTestSelectForUpdateDistributed(String cacheName, boolean outsideTx) throws Exception { awaitPartitionMapExchange(); Ignite node = grid(0); IgniteCache<Integer, ?> cache = node.cache(cacheName); Transaction ignored = outsideTx ? null : node.transactions().txStart(TransactionConcurrency.PESSIMISTIC, TransactionIsolation.REPEATABLE_READ); try { SqlFieldsQuery qry = new SqlFieldsQuery("select id, * from " + tableName(cache) + " order by id for update") .setPageSize(10); FieldsQueryCursor<List<?>> query = cache.query(qry); List<List<?>> res = query.getAll(); List<Integer> keys = new ArrayList<>(); for (List<?> r : res) keys.add((Integer)r.get(0)); checkLocks(cacheName, keys, !outsideTx); } finally { U.close(ignored, log); } }
/** * @param cache Cache. * @param qry Query. * @return Query plan. */ protected final String queryPlan(IgniteCache<?, ?> cache, SqlFieldsQuery qry) { return (String)cache.query(new SqlFieldsQuery("explain " + qry.getSql()) .setArgs(qry.getArgs()) .setLocal(qry.isLocal()) .setCollocated(qry.isCollocated()) .setPageSize(qry.getPageSize()) .setDistributedJoins(qry.isDistributedJoins()) .setEnforceJoinOrder(qry.isEnforceJoinOrder())) .getAll().get(0).get(0); }
/** * Lazy query release partitions on cursor close test. * * @throws Exception If failed. */ @Test public void testLazyQueryPartitionsReleaseOnClose() throws Exception { Ignite node1 = startGrid(0); IgniteCache<Integer, Person> cache = node1.cache(PERSON_CACHE); cache.clear(); Affinity<Integer> aff = node1.affinity(PERSON_CACHE); int partsFilled = fillAllPartitions(cache, aff); SqlFieldsQuery qry = new SqlFieldsQuery("select name, age from person") .setLazy(true) .setPageSize(1); FieldsQueryCursor<List<?>> qryCursor = cache.query(qry); Iterator<List<?>> it = qryCursor.iterator(); if (it.hasNext()) it.next(); else fail("No query results."); startGrid(1); // Close cursor. Partitions should be released now. qryCursor.close(); for (Ignite ig : G.allGrids()) ig.cache(PERSON_CACHE).rebalance().get(); assertEquals("Wrong result set size", partsFilled, cache.query(qry).getAll().size()); }
/** * Reads fields query. * * @param reader Binary reader. * @return Query. */ private Query readFieldsQuery(BinaryRawReaderEx reader) { boolean loc = reader.readBoolean(); String sql = reader.readString(); final int pageSize = reader.readInt(); Object[] args = readQueryArgs(reader); boolean distrJoins = reader.readBoolean(); boolean enforceJoinOrder = reader.readBoolean(); boolean lazy = reader.readBoolean(); int timeout = reader.readInt(); boolean replicated = reader.readBoolean(); boolean collocated = reader.readBoolean(); String schema = reader.readString(); return new SqlFieldsQuery(sql) .setPageSize(pageSize) .setArgs(args) .setLocal(loc) .setDistributedJoins(distrJoins) .setEnforceJoinOrder(enforceJoinOrder) .setLazy(lazy) .setTimeout(timeout, TimeUnit.MILLISECONDS) .setReplicatedOnly(replicated) .setCollocated(collocated) .setSchema(schema); }
/** {@inheritDoc} */ @Override public UpdateSourceIterator<?> prepareDistributedUpdate(GridCacheContext<?, ?> cctx, int[] ids, int[] parts, String schema, String qry, Object[] params, int flags, int pageSize, int timeout, AffinityTopologyVersion topVer, MvccSnapshot mvccSnapshot, GridQueryCancel cancel) throws IgniteCheckedException { SqlFieldsQuery fldsQry = new SqlFieldsQuery(qry); if (params != null) fldsQry.setArgs(params); fldsQry.setEnforceJoinOrder(isFlagSet(flags, GridH2QueryRequest.FLAG_ENFORCE_JOIN_ORDER)); fldsQry.setTimeout(timeout, TimeUnit.MILLISECONDS); fldsQry.setPageSize(pageSize); fldsQry.setLocal(true); fldsQry.setDataPageScanEnabled(isDataPageScanEnabled(flags)); boolean loc = true; final boolean replicated = isFlagSet(flags, GridH2QueryRequest.FLAG_REPLICATED); GridCacheContext<?, ?> cctx0; if (!replicated && !F.isEmpty(ids) && (cctx0 = CU.firstPartitioned(cctx.shared(), ids)) != null && cctx0.config().getQueryParallelism() > 1) { fldsQry.setDistributedJoins(true); loc = false; } Connection conn = connMgr.connectionForThread().connection(schema); H2Utils.setupConnection(conn, false, fldsQry.isEnforceJoinOrder()); PreparedStatement stmt = preparedStatementWithParams(conn, fldsQry.getSql(), F.asList(fldsQry.getArgs()), true); return dmlProc.prepareDistributedUpdate(schema, conn, stmt, fldsQry, backupFilter(topVer, parts), cancel, loc, topVer, mvccSnapshot); }
/** {@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; }