SQLCall call = new SQLCall(); call.setParameters(sqlCall.getParameters()); call.setParameterTypes(sqlCall.getParameterTypes()); writer.write(sqlCall.getSQLString()); writer.write(" RETURNING "); call.appendOut(writer, field); if ((i + 1) < returnFields.size()) { writer.write(", "); call.setQueryString(writer.toString());
/** * INTERNAL: * Called by prepare method only. */ protected void prepareInternal(AbstractSession session) { if (hasCustomSQLArguments()) { // hold results of setCustomSQLArgumentType and useCustomSQLCursorOutputAsResultSet methods Vector updatedParameters = null; Vector updatedParameterTypes = null; if (getParameters().size() > 0) { updatedParameters = getParameters(); setParameters(org.eclipse.persistence.internal.helper.NonSynchronizedVector.newInstance()); updatedParameterTypes = getParameterTypes(); setParameterTypes(org.eclipse.persistence.internal.helper.NonSynchronizedVector.newInstance()); } translateCustomQuery(); if (updatedParameters != null) { afterTranslateCustomQuery(updatedParameters, updatedParameterTypes); } } super.prepareInternal(session); }
for (int i = 0; i < getParameters().size(); i++) { Integer parameterType = (Integer)getParameterTypes().elementAt(i); Object parameter = getParameters().elementAt(i); if ((parameterType == MODIFY) || (parameterType == OUT) || (parameterType == OUT_CURSOR) || ((parameterType == IN) && parameter instanceof DatabaseField)) { DatabaseField field = afterTranslateCustomQueryUpdateParameter((DatabaseField)parameter, i, parameterType, updatedParameters, updatedParameterTypes); if (field!=null){ getParameters().setElementAt(field, i); DatabaseField outField = afterTranslateCustomQueryUpdateParameter((DatabaseField)((Object[])parameter)[1], i, parameterType, updatedParameters, updatedParameterTypes); if (outField !=null){ if (((Object[])parameter)[0] instanceof DatabaseField){ DatabaseField field = afterTranslateCustomQueryUpdateParameter((DatabaseField)parameter, i, parameterType, updatedParameters, updatedParameterTypes); if (field!=null){ getParameters().setElementAt(field, i);
protected boolean writeWhere(Writer writer, SQLCall selectCall, SQLCall call) throws IOException { String selectStr = selectCallForExist.getSQLString(); int index = selectStr.toUpperCase().indexOf(" WHERE "); if(index < 0) { // no where clause - nothing to do return false; } // print the where clause String str = selectStr.substring(index); writer.write(str); // add parameters call.getParameters().addAll(selectCall.getParameters()); call.getParameterTypes().addAll(selectCall.getParameterTypes()); return true; } }
/** * PUBLIC: * This method should only be used with custom SQL: * Used for Oracle result sets through procedures. * It defines OUT parameter (prefixed with ### in custom SQL string) * as a cursor output. */ public void useCustomSQLCursorOutputAsResultSet(String customParameterName) { DatabaseField field = new DatabaseField(customParameterName); getParameters().add(field); getParameterTypes().add(OUT_CURSOR); setIsCursorOutputProcedure(true); } }
SQLCall call = new SQLCall(); call.returnNothing(); String selectStr = selectCall.getSQLString(); int index = selectStr.toUpperCase().indexOf(" FROM "); String firstPart = selectStr.substring(0, index); writer.write(";\n"); call.getParameters().addAll(selectCall.getParameters()); call.getParameterTypes().addAll(selectCall.getParameterTypes()); DatabaseField outField = new DatabaseField("ROW_COUNT"); outField.setType(Integer.class); call.appendOut(writer, outField); writer.write(" := "); writeVar(writer, firstMainPrimaryKey, session.getPlatform()); call.setSQLString(writer.toString());
SQLCall call = new SQLCall(); call.returnNothing(); call.appendModify(writer, field); if ((i + 1) < fieldsForTable.size()) { writer.write(", "); call.setSQLString(writer.toString()); } catch (IOException exception) { throw ValidationException.fileError(exception);
/** * PUBLIC: * This method should only be used with custom SQL: * it sets a type to IN, OUT or INOUT parameter (prefixed with #, ### or #### in custom SQL string). */ public void setCustomSQLArgumentType(String customParameterName, Class type) { DatabaseField field = new DatabaseField(customParameterName); field.setType(type); getParameters().add(field); getParameterTypes().add(null); }
/** * Print the sub query to the printer. */ protected void printCustomSQL(ExpressionSQLPrinter printer) { /* * modified for bug#2658466. This fix ensures that Custom SQL sub-queries are translated * and have variables substituted with values correctly. */ SQLCall call = (SQLCall)getSubQuery().getCall(); call.translateCustomQuery(); printer.getCall().getParameters().addAll(call.getParameters()); printer.getCall().getParameterTypes().addAll(call.getParameterTypes()); printer.printString(call.getCallString()); }
/** * ADVANCED: This can be used to access a queries translated SQL if they * have been prepared, (i.e. query.prepareCall()). This method can be used * for queries with multiple calls. * * @see #prepareCall(org.eclipse.persistence.sessions.Session, org.eclipse.persistence.sessions.Record) prepareCall(Session, Record) */ public List getTranslatedSQLStrings(org.eclipse.persistence.sessions.Session session, Record translationRow) { prepareCall(session, translationRow); CallQueryMechanism queryMechanism = (CallQueryMechanism) getQueryMechanism(); if ((queryMechanism.getCalls() == null) || queryMechanism.getCalls().isEmpty()) { return null; } Vector calls = new Vector(queryMechanism.getCalls().size()); Iterator iterator = queryMechanism.getCalls().iterator(); while (iterator.hasNext()) { SQLCall call = (SQLCall) iterator.next(); call = (SQLCall) call.clone(); call.setUsesBinding(false); call.translate((AbstractRecord) translationRow, queryMechanism.getModifyRow(), (AbstractSession) session); calls.add(call.getSQLString()); } return calls; }
/** * INTERNAL: * Return the correct call type for the native query string. * This allows EIS platforms to use different types of native calls. */ public DatasourceCall buildNativeCall(String queryString) { return new SQLCall(queryString); }
writer.write(call.getSQLString()); if(selectCallForExist.isUsesBindingSet() && !selectCallForExist.usesBinding(session)) { call.setUsesBinding(false); call.setSQLString(writer.toString());
/** * ADVANCED: * This can be used to access a queries translated SQL if they have been prepared, (i.e. query.prepareCall()). * The Record argument is one of (Record, XMLRecord) that contains the query arguments. * @see #prepareCall(org.eclipse.persistence.sessions.Session, Record) */ public String getTranslatedSQLString(org.eclipse.persistence.sessions.Session session, Record translationRow) { prepareCall(session, translationRow); //CR#2859559 fix to use Session and Record interfaces not impl classes. CallQueryMechanism queryMechanism = (CallQueryMechanism)getQueryMechanism(); if (queryMechanism.getCall() == null) { return null; } SQLCall call = (SQLCall)queryMechanism.getCall().clone(); call.setUsesBinding(false); call.translate((AbstractRecord)translationRow, queryMechanism.getModifyRow(), (AbstractSession)session); return call.getSQLString(); }
/** * INTERNAL: * Print SQL using the operator. */ public void printSQL(ExpressionSQLPrinter printer) { // If all children are parameters, some databases don't allow binding. if (printer.getPlatform().isDynamicSQLRequiredForFunctions() && !this.children.isEmpty()) { boolean allParams = true; for (Iterator iterator = this.children.iterator(); iterator.hasNext(); ) { Expression child = (Expression)iterator.next(); if (!(child.isParameterExpression() || child.isConstantExpression())) { allParams = false; } } if (allParams) { printer.getCall().setUsesBinding(false); } } ExpressionOperator realOperator; realOperator = getPlatformOperator(printer.getPlatform()); realOperator.printCollection(this.children, printer); }
int size = getParameters().size(); for (int i = 0; i < size; i++) { Integer parameterType = this.parameterTypes.get(i); Object parameter = this.parameters.get(i); if ((parameterType == MODIFY) || (parameterType == OUT) || (parameterType == OUT_CURSOR) || ((parameterType == IN) && parameter instanceof DatabaseField)) { DatabaseField field = afterTranslateCustomQueryUpdateParameter((DatabaseField)parameter, i, parameterType, updatedParameters, updatedParameterTypes); if (field!=null){ this.parameters.set(i, field); DatabaseField outField = afterTranslateCustomQueryUpdateParameter((DatabaseField)((Object[])parameter)[1], i, parameterType, updatedParameters, updatedParameterTypes); if (outField != null) { if (((Object[])parameter)[0] instanceof DatabaseField){ DatabaseField field = afterTranslateCustomQueryUpdateParameter((DatabaseField)parameter, i, parameterType, updatedParameters, updatedParameterTypes); if (field != null) { this.parameters.set(i, field);
public void printParameter(ParameterExpression expression) { try { getCall().appendTranslationParameter(getWriter(), expression, getPlatform(), getTranslationRow()); } catch (IOException exception) { throw ValidationException.fileError(exception); } }
public void printParameter(DatabaseField field) { getCall().appendTranslation(getWriter(), field); }
SQLCall call = new SQLCall(); call.returnNothing(); String selectStr = selectCall.getSQLString(); int index = selectStr.toUpperCase().indexOf(" FROM "); String firstPart = selectStr.substring(0, index); writer.write(";\n"); call.getParameters().addAll(selectCall.getParameters()); call.getParameterTypes().addAll(selectCall.getParameterTypes()); DatabaseField outField = new DatabaseField("ROW_COUNT"); outField.setType(Integer.class); call.appendOut(writer, outField); writer.write(" := "); writeVar(writer, firstMainPrimaryKey, session.getPlatform()); call.setSQLString(writer.toString());
SQLCall call = new SQLCall(); call.returnNothing(); call.appendModify(writer, field); if ((i + 1) < fieldsForTable.size()) { writer.write(", "); call.setSQLString(writer.toString()); } catch (IOException exception) { throw ValidationException.fileError(exception);
/** * PUBLIC: * This method should only be used with custom SQL: * it sets a type to IN, OUT or INOUT parameter (prefixed with #, ### or #### in custom SQL string). */ public void setCustomSQLArgumentType(String customParameterName, Class type) { DatabaseField field = new DatabaseField(customParameterName); field.setType(type); getParameters().add(field); getParameterTypes().add(null); }