org.eclipse.persistence.internal.expressions.SQLModifyAllStatementForTempTable Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of eclipselink Show documentation
Show all versions of eclipselink Show documentation
EclipseLink build based upon Git transaction f2b9fc5
/*
* Copyright (c) 1998, 2024 Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2022 IBM Corporation. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.internal.expressions;
import org.eclipse.persistence.exceptions.ValidationException;
import org.eclipse.persistence.internal.databaseaccess.DatabaseCall;
import org.eclipse.persistence.internal.helper.DatabaseField;
import org.eclipse.persistence.internal.sessions.AbstractSession;
import org.eclipse.persistence.queries.SQLCall;
import java.io.CharArrayWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Collection;
import java.util.List;
/**
* @author Andrei Ilitchev
* @since TOPLink/Java 1.0
*/
public abstract class SQLModifyAllStatementForTempTable extends SQLModifyStatement {
public static final int CREATE_TEMP_TABLE = 0;
public static final int INSERT_INTO_TEMP_TABLE = 1;
public static final int UPDATE_ORIGINAL_TABLE = 2;
public static final int CLEANUP_TEMP_TABLE = 3;
protected Collection allFields;
protected List primaryKeyFields;
protected SQLCall selectCall;
protected int mode;
public SQLModifyAllStatementForTempTable() {
}
abstract protected Collection getUsedFields();
abstract protected void writeUpdateOriginalTable(AbstractSession session, Writer writer) throws IOException;
public void setAllFields(Collection allFields) {
this.allFields = allFields;
}
public Collection getAllFields() {
return allFields;
}
public void setSelectCall(SQLCall selectCall) {
this.selectCall = selectCall;
}
public SQLCall getSelectCall() {
return selectCall;
}
public void setPrimaryKeyFields(List primaryKeyFields) {
this.primaryKeyFields = primaryKeyFields;
}
public List getPrimaryKeyFields() {
return primaryKeyFields;
}
public void setMode(int mode) {
this.mode = mode;
}
public int getMode() {
return mode;
}
/**
* Append the string containing the SQL insert string for the given table.
*/
@Override
public DatabaseCall buildCall(AbstractSession session) {
SQLCall call = new SQLCall();
call.returnNothing();
Writer writer = new CharArrayWriter(100);
try {
if(mode == CREATE_TEMP_TABLE) {
session.getPlatform().writeCreateTempTableSql(writer, table, session,
getPrimaryKeyFields(),
getUsedFields(),
getAllFields());
} else if(mode == INSERT_INTO_TEMP_TABLE) {
session.getPlatform().writeInsertIntoTableSql(writer, table, getUsedFields());
call.getParameters().addAll(selectCall.getParameters());
call.getParameterTypes().addAll(selectCall.getParameterTypes());
call.getParameterBindings().addAll(selectCall.getParameterBindings());
String selectStr = selectCall.getSQLString();
writer.write(selectStr);
} else if(mode == UPDATE_ORIGINAL_TABLE) {
writeUpdateOriginalTable(session, writer);
} else if(mode == CLEANUP_TEMP_TABLE) {
session.getPlatform().writeCleanUpTempTableSql(writer, table);
} else {
// should never happen
}
call.setSQLString(writer.toString());
} catch (IOException exception) {
throw ValidationException.fileError(exception);
}
return call;
}
}