return new SimpleQuery((String[]) statementList.get(0), protoConnection); subqueries[i] = new SimpleQuery(fragments, protoConnection); offset += fragments.length - 1;
public void close() { for (SimpleQuery subquery : subqueries) { subquery.close(); } }
public ParameterList createParameterList() { SimpleParameterList[] subparams = new SimpleParameterList[subqueries.length]; for (int i = 0; i < subqueries.length; ++i) { subparams[i] = (SimpleParameterList) subqueries[i].createParameterList(); } return new CompositeParameterList(subparams, offsets); }
private void sendDescribeStatement(SimpleQuery query, SimpleParameterList params, boolean describeOnly) throws IOException { // Send Statement Describe LOGGER.log(Level.FINEST, " FE=> Describe(statement={0})", query.getStatementName()); byte[] encodedStatementName = query.getEncodedStatementName(); // Total size = 4 (size field) + 1 (describe type, 'S') + N + 1 (portal name) int encodedSize = 4 + 1 + (encodedStatementName == null ? 0 : encodedStatementName.length) + 1; pgStream.sendChar('D'); // Describe pgStream.sendInteger4(encodedSize); // Message size pgStream.sendChar('S'); // Describe (Statement); if (encodedStatementName != null) { pgStream.send(encodedStatementName); // Statement name } pgStream.sendChar(0); // end message // Note: statement name can change over time for the same query object // Thus we take a snapshot of the query name pendingDescribeStatementQueue.add( new DescribeRequest(query, params, describeOnly, query.getStatementName())); pendingDescribePortalQueue.add(query); query.setStatementDescribed(true); query.setPortalDescribed(true); }
if (sq.isStatementDescribed()) { int maxResultRowSize = sq.getMaxResultRowSize(); if (maxResultRowSize >= 0) { estimatedReceiveBufferBytes += maxResultRowSize;
if (asSimple) { assert (flags & QueryExecutor.QUERY_DESCRIBE_ONLY) == 0 : "Simple mode does not support describe requests. sql = " + query.getNativeSql() + ", flags = " + flags; sendSimpleQuery(query, params); assert !query.getNativeQuery().multiStatement : "Queries that might contain ; must be executed with QueryExecutor.QUERY_EXECUTE_AS_SIMPLE mode. " + "Given query is " + query.getNativeSql(); boolean queryHasUnknown = query.hasUnresolvedTypes(); boolean paramsHasUnknown = params.hasUnresolvedTypes(); || (!oneShot && paramsHasUnknown && queryHasUnknown && !query.isStatementDescribed()); int[] queryOIDs = query.getPrepareTypes(); int[] paramOIDs = params.getTypeOIDs(); for (int i = 0; i < paramOIDs.length; i++) { if (!query.isPortalDescribed() || forceDescribePortal) { sendDescribePortal(query, portal);
private void sendParse(SimpleQuery query, SimpleParameterList params, boolean oneShot) throws IOException { if (query.isPreparedFor(typeOIDs)) return; query.unprepare(); processDeadParsedQueries(); query.setStatementName(statementName); query.setStatementTypes((int[])typeOIDs.clone()); byte[] encodedStatementName = query.getEncodedStatementName(); String[] fragments = query.getFragments(); pgStream.SendInteger4(params.getTypeOID(i)); pendingParseQueue.add(new Object[]{query, query.getStatementName()});
if ((origStatementName == null && query.getStatementName() == null) || (origStatementName != null && origStatementName.equals(query.getStatementName()))) { query.setStatementTypes((int[])params.getTypeOIDs().clone()); SimpleQuery currentQuery = (SimpleQuery)describeData[0]; Field[] fields = currentQuery.getFields(); Portal currentPortal = (Portal)executeData[1]; Field[] fields = currentQuery.getFields(); if (fields != null && !noResults && tuples == null) tuples = new Vector(); Portal currentPortal = (Portal)executeData[1]; Field[] fields = currentQuery.getFields(); if (fields != null && !noResults && tuples == null) tuples = new Vector(); query.setFields(fields); failedQuery.unprepare();
String parsedStatementName = parsedQuery.getStatementName(); if ((origStatementName == null && query.getStatementName() == null) || (origStatementName != null && origStatementName.equals(query.getStatementName()))) { query.setPrepareTypes(params.getTypeOIDs()); Field[] fields = currentQuery.getFields(); Field[] fields = currentQuery.getFields(); if (fields != null && tuples == null) { String nativeSql = currentQuery.getNativeQuery().nativeSql; Field[] fields = currentQuery.getFields(); if (fields != null && tuples == null) { currentQuery.setFields(null); query.setFields(fields); currentQuery.setFields(fields); executeRequest.query.setFields(null); failedQuery.unprepare(); DescribeRequest request = pendingDescribeStatementQueue.removeFirst(); LOGGER.log(Level.FINEST, " FE marking setStatementDescribed(false) for query {0}", request.query);
boolean queryHasUnknown = query.hasUnresolvedTypes(); boolean paramsHasUnknown = params.hasUnresolvedTypes(); boolean describeStatement = describeOnly || (!oneShot && paramsHasUnknown && queryHasUnknown && !query.isStatementDescribed()); int queryOIDs[] = query.getStatementTypes(); int paramOIDs[] = params.getTypeOIDs(); for (int i=0; i<paramOIDs.length; i++) { if (!noMeta && !describeStatement && !query.isPortalDescribed()) sendDescribePortal(query, portal);
if (query.isPreparedFor(typeOIDs, deallocateEpoch)) { return; query.unprepare(); processDeadParsedQueries(); query.setFields(null); query.setStatementName(statementName, deallocateEpoch); query.setPrepareTypes(typeOIDs); registerParsedQuery(query, statementName); byte[] encodedStatementName = query.getEncodedStatementName(); String nativeSql = query.getNativeSql();
String statementName = query.getStatementName(); byte[] encodedStatementName = query.getEncodedStatementName(); byte[] encodedPortalName = (portal == null ? null : portal.getEncodedPortalName()); Field[] fields = query.getFields(); if (!noBinaryTransfer && query.needUpdateFieldFormats()) { for (Field field : fields) { if (useBinary(field)) { field.setFormat(Field.BINARY_FORMAT); query.setHasBinaryFields(true); if (noBinaryTransfer && query.hasBinaryFields()) { for (Field field : fields) { if (field.getFormat() != Field.TEXT_FORMAT) { query.resetNeedUpdateFieldFormats(); query.setHasBinaryFields(false); int numBinaryFields = !noBinaryTransfer && query.hasBinaryFields() ? fields.length : 0;
String statementName = query.getStatementName(); byte[] encodedStatementName = query.getEncodedStatementName(); byte[] encodedPortalName = (portal == null ? null : portal.getEncodedPortalName());
public boolean isStatementDescribed() { for (SimpleQuery subquery : subqueries) { if (!subquery.isStatementDescribed()) { return false; } } return true; }
private boolean sendAutomaticSavepoint(Query query, int flags) throws IOException { if (((flags & QueryExecutor.QUERY_SUPPRESS_BEGIN) == 0 || getTransactionState() == TransactionState.OPEN) && query != restoreToAutoSave && getAutoSave() != AutoSave.NEVER // If query has no resulting fields, it cannot fail with 'cached plan must not change result type' // thus no need to set a safepoint before such query && (getAutoSave() == AutoSave.ALWAYS // If CompositeQuery is observed, just assume it might fail and set the savepoint || !(query instanceof SimpleQuery) || ((SimpleQuery) query).getFields() != null)) { sendOneQuery(autoSaveQuery, SimpleQuery.NO_PARAMETERS, 1, 0, QUERY_NO_RESULTS | QUERY_NO_METADATA // PostgreSQL does not support bind, exec, simple, sync message flow, // so we force autosavepoint to use simple if the main query is using simple | QUERY_EXECUTE_AS_SIMPLE); return true; } return false; }
private void sendParse(SimpleQuery query, SimpleParameterList params, boolean oneShot) throws IOException { if (query.isPreparedFor(typeOIDs)) return; query.unprepare(); processDeadParsedQueries(); query.setStatementName(statementName); query.setStatementTypes((int[])typeOIDs.clone()); byte[] encodedStatementName = query.getEncodedStatementName(); String[] fragments = query.getFragments(); pgStream.SendInteger4(params.getTypeOID(i)); pendingParseQueue.add(new Object[]{query, query.getStatementName()});
if ((origStatementName == null && query.getStatementName() == null) || (origStatementName != null && origStatementName.equals(query.getStatementName()))) { query.setStatementTypes((int[])params.getTypeOIDs().clone()); SimpleQuery currentQuery = (SimpleQuery)describeData[0]; Field[] fields = currentQuery.getFields(); Portal currentPortal = (Portal)executeData[1]; Field[] fields = currentQuery.getFields(); if (fields != null && !noResults && tuples == null) tuples = new Vector(); Portal currentPortal = (Portal)executeData[1]; Field[] fields = currentQuery.getFields(); if (fields != null && !noResults && tuples == null) tuples = new Vector(); query.setFields(fields); failedQuery.unprepare();
private void sendDescribeStatement(SimpleQuery query, SimpleParameterList params, boolean describeOnly) throws IOException { // Send Statement Describe if (logger.logDebug()) { logger.debug(" FE=> Describe(statement=" + query.getStatementName()+")"); } byte[] encodedStatementName = query.getEncodedStatementName(); // Total size = 4 (size field) + 1 (describe type, 'S') + N + 1 (portal name) int encodedSize = 4 + 1 + (encodedStatementName == null ? 0 : encodedStatementName.length) + 1; pgStream.SendChar('D'); // Describe pgStream.SendInteger4(encodedSize); // Message size pgStream.SendChar('S'); // Describe (Statement); if (encodedStatementName != null) pgStream.Send(encodedStatementName); // Statement name pgStream.SendChar(0); // end message pendingDescribeStatementQueue.add(new Object[]{query, params, new Boolean(describeOnly), query.getStatementName()}); pendingDescribePortalQueue.add(query); query.setStatementDescribed(true); query.setPortalDescribed(true); }
boolean queryHasUnknown = query.hasUnresolvedTypes(); boolean paramsHasUnknown = params.hasUnresolvedTypes(); boolean describeStatement = describeOnly || (!oneShot && paramsHasUnknown && queryHasUnknown && !query.isStatementDescribed()); int queryOIDs[] = query.getStatementTypes(); int paramOIDs[] = params.getTypeOIDs(); for (int i=0; i<paramOIDs.length; i++) { if (!noMeta && !describeStatement && !query.isPortalDescribed()) sendDescribePortal(query, portal);
String statementName = query.getStatementName(); byte[] encodedStatementName = query.getEncodedStatementName(); byte[] encodedPortalName = (portal == null ? null : portal.getEncodedPortalName());