Compare commits

...

5 Commits

Author SHA1 Message Date
Maksym Basiuk
39a4cab31d feat(TDI-34637): fix insert or update on duplicate key update 2018-06-21 13:27:13 +03:00
Maksym Basiuk
a9e383dba2 feat(TDI-34637): fix support null in where clause 2018-06-21 12:35:52 +03:00
Maksym Basiuk
701fed9e36 feta(TDI-34637): implement feature for rest data actions 2018-06-21 12:35:44 +03:00
Maksym Basiuk
d5fb322288 feat(TDI-34637): fix query string definition 2018-06-21 12:35:34 +03:00
Maksym Basiuk
dfb5f7083d feat(TDI-34637): make a first implementation of the feature 2018-06-21 12:35:26 +03:00
3 changed files with 282 additions and 236 deletions

View File

@@ -107,7 +107,7 @@ if(("UPDATE").equals(dataAction) || ("INSERT_OR_UPDATE").equals(dataAction) || (
int updateKeyCount = 0;
if(stmtStructure != null) {
for(Column column : stmtStructure) {
if(column.isUpdateKey() && !column.isDynamic()) {
if(column.isUpdateKey()) {
updateKeyCount++;
}
}
@@ -122,7 +122,7 @@ if(("UPDATE").equals(dataAction) || ("INSERT_OR_UPDATE").equals(dataAction) || (
int deleteKeyCount = 0;
if(stmtStructure != null) {
for(Column column : stmtStructure) {
if(column.isDeleteKey() && !column.isDynamic()) {
if(column.isDeleteKey()) {
deleteKeyCount++;
}
}

View File

@@ -198,19 +198,10 @@ if(columnList != null && columnList.size() > 0) {
List< ? extends IConnection> conns_dynamic = node.getIncomingConnections();
if(conns_dynamic!=null && conns_dynamic.size()>0){
IConnection conn = conns_dynamic.get(0);
if(!("".equals(insertColName.toString()))) {
%>
String insert_<%=cid%> = "INSERT INTO `" + tableName_<%=cid%> + "` (<%=insertColName.toString()%>, "+DynamicUtils.getInsertIntoStmtColumnsList(<%=conn.getName()%>.<%=getDynamicColumn()%>, "<%=dbmsId %>")+") VALUES (<%=insertValueStmt.toString()%>, "+DynamicUtils.getInsertIntoStmtValuesList(<%=conn.getName()%>.<%=getDynamicColumn()%>)+")";
<% } else {
%>
String insert_<%=cid%> = "INSERT INTO `" + tableName_<%=cid%> + "` ("+DynamicUtils.getInsertIntoStmtColumnsList(<%=conn.getName()%>.<%=getDynamicColumn()%>, "<%=dbmsId %>")+") VALUES ("+DynamicUtils.getInsertIntoStmtValuesList(<%=conn.getName()%>.<%=getDynamicColumn()%>)+")";
<%=getManager(dbmsId, cid).getInsertQueryForDynamicSchema(conn.getName(), "tableName_", insertColName.toString(), insertValueStmt.toString(), dataAction)%>;
<%
}
}
%>
<%
if (supportDuplicateUpdate) {
%>
insert_<%=cid%> += duplidateClause_<%=cid%>.toString();
@@ -271,19 +262,14 @@ if(columnList != null && columnList.size() > 0) {
List< ? extends IConnection> conns_dynamic = node.getIncomingConnections();
if(conns_dynamic!=null && conns_dynamic.size()>0){
IConnection conn = conns_dynamic.get(0);
if(!("".equals(insertColName.toString()))) {
%>
insert_<%=cid%> = "INSERT INTO `" + <%=table%> + "` (<%=insertColName.toString()%>, "+DynamicUtils.getInsertIntoStmtColumnsList(<%=conn.getName()%>.<%=getDynamicColumn()%>, "<%=dbmsId %>")+") VALUES " + extendInsertValueStmt_<%=cid%>.toString();
<% } else {
insert_<%=cid%> = "INSERT INTO `" + <%=table%> + "` ("+DynamicUtils.getInsertIntoStmtColumnsList(<%=conn.getName()%>.<%=getDynamicColumn()%>, "<%=dbmsId %>", <%=insertColName.toString()%>)+") VALUES " + extendInsertValueStmt_<%=cid%>.toString();
<%
if (supportDuplicateUpdate) {
%>
insert_<%=cid%> = "INSERT INTO `" + <%=table%> + "` ("+DynamicUtils.getInsertIntoStmtColumnsList(<%=conn.getName()%>.<%=getDynamicColumn()%>, "<%=dbmsId %>")+") VALUES " + extendInsertValueStmt_<%=cid%>.toString();
insert_<%=cid%> += duplidateClause_<%=cid%>.toString();
<%
}
if (supportDuplicateUpdate) {
%>
insert_<%=cid%> += duplidateClause_<%=cid%>.toString();
<%
}
%>
<%@ include file="../templates/_hintInsert.javajet" %>
pstmt_<%=cid %> = conn_<%=cid%>.prepareStatement(insert_<%=cid%>);
@@ -292,13 +278,13 @@ if(columnList != null && columnList.size() > 0) {
if(!("".equals(insertColName.toString()))) {
%>
insertColName<%=cid%> = "<%=insertColName.toString()%>, "+DynamicUtils.getInsertIntoStmtColumnsList(<%=conn.getName()%>.<%=getDynamicColumn()%>, "<%=dbmsId %>");
insertColValue<%=cid%> = "<%=insertValueStmt.toString()%>, "+DynamicUtils.getInsertIntoStmtValuesList(<%=conn.getName()%>.<%=getDynamicColumn()%>);
insertColName<%=cid%> = "<%=insertColName.toString()%>, "+DynamicUtils.getInsertIntoStmtColumnsList(<%=conn.getName()%>.<%=getDynamicColumn()%>, "<%=dbmsId %>");
insertColValue<%=cid%> = "<%=insertValueStmt.toString()%>, "+DynamicUtils.getInsertIntoStmtValuesList(<%=conn.getName()%>.<%=getDynamicColumn()%>);
<%
} else {
%>
insertColName<%=cid%> = DynamicUtils.getInsertIntoStmtColumnsList(<%=conn.getName()%>.<%=getDynamicColumn()%>, "<%=dbmsId %>");
insertColValue<%=cid%> = DynamicUtils.getInsertIntoStmtValuesList(<%=conn.getName()%>.<%=getDynamicColumn()%>);
insertColName<%=cid%> = DynamicUtils.getInsertIntoStmtColumnsList(<%=conn.getName()%>.<%=getDynamicColumn()%>, "<%=dbmsId %>");
insertColValue<%=cid%> = DynamicUtils.getInsertIntoStmtValuesList(<%=conn.getName()%>.<%=getDynamicColumn()%>);
<%
}
}
@@ -315,14 +301,9 @@ if(columnList != null && columnList.size() > 0) {
List< ? extends IConnection> conns_dynamic = node.getIncomingConnections();
if(conns_dynamic!=null && conns_dynamic.size()>0){
IConnection conn = conns_dynamic.get(0);
if(!("".equals(insertColName.toString()))) {
%>
String insert_<%=cid%> = "INSERT INTO `" + <%=table%> + "` (<%=insertColName.toString()%>, "+DynamicUtils.getInsertIntoStmtColumnsList(<%=conn.getName()%>.<%=getDynamicColumn()%>, "<%=dbmsId %>")+") VALUES (<%=insertValueStmt.toString()%>, "+DynamicUtils.getInsertIntoStmtValuesList(<%=conn.getName()%>.<%=getDynamicColumn()%>)+")";
<% } else {
%>
String insert_<%=cid%> = "INSERT INTO `" + <%=table%> + "` ("+DynamicUtils.getInsertIntoStmtColumnsList(<%=conn.getName()%>.<%=getDynamicColumn()%>, "<%=dbmsId %>")+") VALUES ("+DynamicUtils.getInsertIntoStmtValuesList(<%=conn.getName()%>.<%=getDynamicColumn()%>)+")";
<%=getManager(dbmsId, cid).getInsertQueryForDynamicSchema(conn.getName(), "tableName_", insertColName.toString(), insertValueStmt.toString(), dataAction)%>;
<%
}
}
if (supportDuplicateUpdate) {
%>
@@ -353,14 +334,9 @@ if(columnList != null && columnList.size() > 0) {
List< ? extends IConnection> conns_dynamic = node.getIncomingConnections();
if(conns_dynamic!=null && conns_dynamic.size()>0){
IConnection conn = conns_dynamic.get(0);
if(!("".equals(updateSetStmt.toString()))) {
%>
String update_<%=cid%> = "UPDATE `" + tableName_<%=cid%> + "` SET <%=updateSetStmt.toString()%>, "+DynamicUtils.getUpdateSet(<%=conn.getName()%>.<%=getDynamicColumn()%>, "<%=dbmsId %>")+" WHERE <%=updateWhereStmt.toString()%>";
<% } else {
%>
String update_<%=cid%> = "UPDATE `" + tableName_<%=cid%> + "` SET "+DynamicUtils.getUpdateSet(<%=conn.getName()%>.<%=getDynamicColumn()%>, "<%=dbmsId %>")+" WHERE <%=updateWhereStmt.toString()%>";
<%=getManager(dbmsId, cid).getUpdateQueryForDynamicSchema(conn.getName(), "tableName_", updateSetStmt.toString(), updateWhereStmt.toString(), whereSupportNull)%>;
<%
}
}
%>
<%@ include file="../templates/_hintUpdate.javajet" %>
@@ -368,29 +344,16 @@ if(columnList != null && columnList.size() > 0) {
resourceMap.put("pstmt_<%=cid %>", pstmt_<%=cid %>);
<%
} else if (("INSERT_OR_UPDATE").equals(dataAction)) {
List< ? extends IConnection> conns_dynamic = node.getIncomingConnections();
if(conns_dynamic!=null && conns_dynamic.size()>0){
IConnection conn = conns_dynamic.get(0);
if(!("".equals(insertColName.toString()))) {
List< ? extends IConnection> conns_dynamic = node.getIncomingConnections();
if(conns_dynamic!=null && conns_dynamic.size()>0){
IConnection conn = conns_dynamic.get(0);
%>
String insert_<%=cid%> = "INSERT INTO `" + tableName_<%=cid%> + "` (<%=insertColName.toString()%>, "+DynamicUtils.getInsertIntoStmtColumnsList(<%=conn.getName()%>.<%=getDynamicColumn()%>, "<%=dbmsId %>")+") VALUES (<%=insertValueStmt.toString()%>, "+DynamicUtils.getInsertIntoStmtValuesList(<%=conn.getName()%>.<%=getDynamicColumn()%>)+")";
<% } else {
%>
String insert_<%=cid%> = "INSERT INTO `" + tableName_<%=cid%> + "` ("+DynamicUtils.getInsertIntoStmtColumnsList(<%=conn.getName()%>.<%=getDynamicColumn()%>, "<%=dbmsId %>")+") VALUES ("+DynamicUtils.getInsertIntoStmtValuesList(<%=conn.getName()%>.<%=getDynamicColumn()%>)+")";
<%=getManager(dbmsId, cid).getInsertQueryForDynamicSchema(conn.getName(), "tableName_", insertColName.toString(), insertValueStmt.toString(), dataAction)%>;
<%=getManager(dbmsId, cid).getUpdateQueryForDynamicSchema(conn.getName(), "tableName_", updateSetStmt.toString(), updateWhereStmt.toString(), whereSupportNull)%>;
<%
}
if(!("".equals(updateSetStmt.toString()))) {
}
%>
String update_<%=cid%> = "UPDATE `" + tableName_<%=cid%> + "` SET <%=updateSetStmt.toString()%>, "+DynamicUtils.getUpdateSet(<%=conn.getName()%>.<%=getDynamicColumn()%>, "<%=dbmsId %>")+" WHERE <%=updateWhereStmt.toString()%>";
<% } else {
%>
String update_<%=cid%> = "UPDATE `" + tableName_<%=cid%> + "` SET "+DynamicUtils.getUpdateSet(<%=conn.getName()%>.<%=getDynamicColumn()%>, "<%=dbmsId %>")+" WHERE <%=updateWhereStmt.toString()%>";
<%
}
}
%>
pstmt_<%=cid %> = conn_<%=cid%>.prepareStatement("SELECT COUNT(1) FROM `" + <%=table%> + "` WHERE <%=updateWhereStmt.toString()%>");//String insert_<%=cid%> = "INSERT INTO `" + <%=table%> + "` (<%=insertColName.toString()%>) VALUES (<%=insertValueStmt.toString()%>)";
pstmt_<%=cid %> = conn_<%=cid%>.prepareStatement("SELECT COUNT(1) FROM `" + <%=table%> + "` WHERE " + DynamicUtils.getUpdateWhere(<%=incomingConnName%>.<%=getDynamicColumn()%>, "<%=dbmsId %>", new StringBuilder("<%=updateWhereStmt.toString() %>"), <%=whereSupportNull%>));//String insert_<%=cid%> = "INSERT INTO `" + <%=table%> + "` (<%=insertColName.toString()%>) VALUES (<%=insertValueStmt.toString()%>)";
resourceMap.put("pstmt_<%=cid %>", pstmt_<%=cid %>);
<%@ include file="../templates/_hintInsert.javajet" %>
pstmtInsert_<%=cid %> = conn_<%=cid%>.prepareStatement(insert_<%=cid%>);
@@ -403,23 +366,10 @@ if(columnList != null && columnList.size() > 0) {
List< ? extends IConnection> conns_dynamic = node.getIncomingConnections();
if(conns_dynamic!=null && conns_dynamic.size()>0){
IConnection conn = conns_dynamic.get(0);
if(!("".equals(insertColName.toString()))) {
%>
String insert_<%=cid%> = "INSERT INTO `" + tableName_<%=cid%> + "` (<%=insertColName.toString()%>, "+DynamicUtils.getInsertIntoStmtColumnsList(<%=conn.getName()%>.<%=getDynamicColumn()%>, "<%=dbmsId %>")+") VALUES (<%=insertValueStmt.toString()%>, "+DynamicUtils.getInsertIntoStmtValuesList(<%=conn.getName()%>.<%=getDynamicColumn()%>)+")";
<% } else {
%>
String insert_<%=cid%> = "INSERT INTO `" + tableName_<%=cid%> + "` ("+DynamicUtils.getInsertIntoStmtColumnsList(<%=conn.getName()%>.<%=getDynamicColumn()%>, "<%=dbmsId %>")+") VALUES ("+DynamicUtils.getInsertIntoStmtValuesList(<%=conn.getName()%>.<%=getDynamicColumn()%>)+")";
<%=getManager(dbmsId, cid).getInsertQueryForDynamicSchema(conn.getName(), "tableName_", insertColName.toString(), insertValueStmt.toString(), dataAction)%>;
<%=getManager(dbmsId, cid).getUpdateQueryForDynamicSchema(conn.getName(), "tableName_", updateSetStmt.toString(), updateWhereStmt.toString(), whereSupportNull)%>;
<%
}
if(!("".equals(updateSetStmt.toString()))) {
%>
String update_<%=cid%> = "UPDATE `" + tableName_<%=cid%> + "` SET <%=updateSetStmt.toString()%>, "+DynamicUtils.getUpdateSet(<%=conn.getName()%>.<%=getDynamicColumn()%>, "<%=dbmsId %>")+" WHERE <%=updateWhereStmt.toString()%>";
<% } else {
%>
String update_<%=cid%> = "UPDATE `" + tableName_<%=cid%> + "` SET "+DynamicUtils.getUpdateSet(<%=conn.getName()%>.<%=getDynamicColumn()%>, "<%=dbmsId %>")+" WHERE <%=updateWhereStmt.toString()%>";
<%
}
}
%>
<%@ include file="../templates/_hintUpdate.javajet" %>
@@ -430,27 +380,52 @@ if(columnList != null && columnList.size() > 0) {
resourceMap.put("pstmtInsert_<%=cid %>", pstmtInsert_<%=cid %>);
<%
} else if (("DELETE").equals(dataAction)) {
%>
String delete_<%=cid%> = "DELETE FROM `" + <%=table%> + "` WHERE <%=deleteWhereStmt.toString()%>";
List< ? extends IConnection> conns_dynamic = node.getIncomingConnections();
if(conns_dynamic!=null && conns_dynamic.size()>0){
IConnection conn = conns_dynamic.get(0);
%>
String delete_<%=cid%> = "DELETE FROM `" + <%=table%> + "` WHERE " + DynamicUtils.getUpdateWhere(<%=conn.getName()%>.<%=getDynamicColumn()%>, "<%=dbmsId %>", new StringBuilder("<%=deleteWhereStmt.toString()%>"), <%=whereSupportNull%>);
<%
}
%>
<%@ include file="../templates/_hintDelete.javajet" %>
pstmt_<%=cid %> = conn_<%=cid%>.prepareStatement(delete_<%=cid%>);
resourceMap.put("pstmt_<%=cid %>", pstmt_<%=cid %>);
<%
} else if(("REPLACE").equals(dataAction)) {
%>
String replace_<%=cid%> = "REPLACE INTO `" + <%=table%> + "` (<%=insertColName.toString()%>) VALUES (<%=insertValueStmt.toString()%>)";
List< ? extends IConnection> conns_dynamic = node.getIncomingConnections();
if(conns_dynamic!=null && conns_dynamic.size()>0){
IConnection conn = conns_dynamic.get(0);
%>
<%=getManager(dbmsId, cid).getInsertQueryForDynamicSchema(conn.getName(), "tableName_", insertColName.toString(), insertValueStmt.toString(), dataAction)%>;
<%
}
%>
pstmt_<%=cid %> = conn_<%=cid%>.prepareStatement(replace_<%=cid%>);
resourceMap.put("pstmt_<%=cid %>", pstmt_<%=cid %>);
<%
} else if(("INSERT_ON_DUPLICATE_KEY_UPDATE").equals(dataAction)) {
%>
String insertIgnore_<%=cid%> = "INSERT IGNORE INTO `" + <%=table%> + "` (<%=insertColName.toString()%>) VALUES (<%=insertValueStmt.toString()%>) ON DUPLICATE KEY UPDATE <%=updateSetStmt.toString()%>";
List< ? extends IConnection> conns_dynamic = node.getIncomingConnections();
if(conns_dynamic!=null && conns_dynamic.size()>0){
IConnection conn = conns_dynamic.get(0);
%>
<%=getManager(dbmsId, cid).getInsertQueryForDynamicSchema(conn.getName(), "tableName_", insertColName.toString(), insertValueStmt.toString(), dataAction)%>;
insertIgnore_<%=cid%> = insertIgnore_<%=cid%> + " ON DUPLICATE KEY UPDATE " + DynamicUtils.getUpdateSet(<%=conn.getName()%>.<%=getDynamicColumn()%>, "<%=dbmsId %>", new StringBuilder("<%=updateSetStmt.toString()%>"));
<%
}
%>
pstmt_<%=cid %> = conn_<%=cid%>.prepareStatement(insertIgnore_<%=cid%>);
resourceMap.put("pstmt_<%=cid %>", pstmt_<%=cid %>);
<%
<%
} else if(("INSERT_IGNORE").equals(dataAction)) {
%>
String insert_<%=cid%> = "INSERT IGNORE INTO `" + <%=table%> + "` (<%=insertColName.toString()%>) VALUES (<%=insertValueStmt.toString()%>)";
List< ? extends IConnection> conns_dynamic = node.getIncomingConnections();
if(conns_dynamic!=null && conns_dynamic.size()>0){
IConnection conn = conns_dynamic.get(0);
%>
<%=getManager(dbmsId, cid).getInsertQueryForDynamicSchema(conn.getName(), "tableName_", insertColName.toString(), insertValueStmt.toString(), dataAction)%>;
<%
}
%>
<%@ include file="../templates/_hintInsert.javajet" %>
pstmt_<%=cid %> = conn_<%=cid%>.prepareStatement(insert_<%=cid%>);
resourceMap.put("pstmt_<%=cid %>", pstmt_<%=cid %>);
@@ -943,19 +918,15 @@ if(columnList != null && columnList.size() > 0) {
}
}
if(isDynamic) {
Column dynamicColumn = getColumn(getDynamicColumn());
String typeToGenerate = JavaTypesManager.getTypeToGenerate(dynamicColumn.getColumn().getTalendType(), dynamicColumn.getColumn().isNullable());
if("Dynamic".equals(typeToGenerate)) {
if(isEnableDebug) {
%>
routines.system.DynamicUtils.debugDynamicSql(query_<%=cid%>,<%=incomingConnName%>.<%=dynamicColumn.getName()%>, <%=counterCol%>,updateSQLSplits_<%=cid%>);
<%
}
%>
int count_<%=cid%>=DynamicUtils.writeColumnsToDatabse(<%=incomingConnName%>.<%=dynamicColumn.getName()%>, pstmt_<%=cid%>, <%=counterCol-1%>, "<%=dbmsId%>");
<%
if(isEnableDebug) {
%>
routines.system.DynamicUtils.debugDynamicSql(query_<%=cid%>,<%=incomingConnName%>.<%=getDynamicColumn()%>, <%=counterCol%>,updateSQLSplits_<%=cid%>);
<%
}
%>
int count_<%=cid%>=DynamicUtils.writeColumnsToDatabse(<%=incomingConnName%>.<%=getDynamicColumn()%>, pstmt_<%=cid%>, <%=counterCol-1%>, "<%=dbmsId%>", true);
<%
}
for(Column column:colStruct){
@@ -967,46 +938,52 @@ if(columnList != null && columnList.size() > 0) {
<%
//#############for feature:2880 and 6980
if(whereSupportNull && column.getColumn().isNullable()) {
if(isDynamic){
%>
<%=getManager(dbmsId, cid).generateSetBooleanForNullableKeyStmt(talendDynCol.getLabel(),column, counterCol, incomingConnName, cid, NORMAL_TYPE)%>
<%
}else{
%>
<%=getManager(dbmsId, cid).generateSetBooleanForNullableKeyStmt(column, counterCol, incomingConnName, cid, NORMAL_TYPE)%>
<%
}
if(isDynamic){
%>
<%=getManager(dbmsId, cid).generateSetBooleanForNullableKeyStmt(column, counterCol, incomingConnName, cid, NORMAL_TYPE, " + count_")%>
<%
}else{
%>
<%=getManager(dbmsId, cid).generateSetBooleanForNullableKeyStmt(column, counterCol, incomingConnName, cid, NORMAL_TYPE)%>
<%
}
if(isEnableDebug) {
if(isDynamic){
%>
query_<%=cid%> = <%=getManager(dbmsId, cid).retrieveSQL(talendDynCol.getLabel(),typeToGenerate, column, incomingConnName, cid, "query_" , counterCol, "updateSQLSplits_", "(("+incomingConnName+"."+column.getName()+"==null)?1:0)")%>;
<%
}else{
%>
query_<%=cid%> = <%=getManager(dbmsId, cid).retrieveSQL(typeToGenerate, column, incomingConnName, cid, "query_" , counterCol, "updateSQLSplits_", "(("+incomingConnName+"."+column.getName()+"==null)?1:0)")%>;
<%
}
}
counterCol++;
}
//#############
%>
<%=getManager(dbmsId, cid).generateSetStmt(typeToGenerate, column, counterCol, incomingConnName, cid, NORMAL_TYPE, " + count_")%>
<%
if(isEnableDebug) {
if(isDynamic){
%>
query_<%=cid%> = <%=getManager(dbmsId, cid).retrieveSQL(talendDynCol.getLabel(),typeToGenerate, column, incomingConnName, cid, "query_" , counterCol, "updateSQLSplits_", "(("+incomingConnName+"."+column.getName()+"==null)?1:0)")%>;
<%
%>
query_<%=cid%> = <%=getManager(dbmsId, cid).retrieveSQL(talendDynCol.getLabel(),typeToGenerate, column, incomingConnName, cid, "query_" , counterCol, "updateSQLSplits_")%>;
<%
}else{
%>
query_<%=cid%> = <%=getManager(dbmsId, cid).retrieveSQL(typeToGenerate, column, incomingConnName, cid, "query_" , counterCol, "updateSQLSplits_", "(("+incomingConnName+"."+column.getName()+"==null)?1:0)")%>;
<%
%>
query_<%=cid%> = <%=getManager(dbmsId, cid).retrieveSQL(typeToGenerate, column, incomingConnName, cid, "query_" , counterCol, "updateSQLSplits_")%>;
<%
}
}
counterCol++;
}
//#############
%>
<%=getManager(dbmsId, cid).generateSetStmt(typeToGenerate, column, counterCol, incomingConnName, cid, NORMAL_TYPE, " + count_")%>
<%
if(isEnableDebug) {
if(isDynamic){
%>
query_<%=cid%> = <%=getManager(dbmsId, cid).retrieveSQL(talendDynCol.getLabel(),typeToGenerate, column, incomingConnName, cid, "query_" , counterCol, "updateSQLSplits_")%>;
<%
}else{
%>
query_<%=cid%> = <%=getManager(dbmsId, cid).retrieveSQL(typeToGenerate, column, incomingConnName, cid, "query_" , counterCol, "updateSQLSplits_")%>;
<%
}
}
counterCol++;
}
}
if(isDynamic) {
%>
routines.system.DynamicUtils.insertKeyInWhereClause(<%=incomingConnName%>.<%=getDynamicColumn()%>, pstmt_<%=cid%>, (count_<%=cid%> + <%=counterCol%>), "<%=dbmsId%>", <%=whereSupportNull%>);
<%
}
if(isEnableDebug) {
%>
globalMap.put("<%=cid %>_QUERY", query_<%=cid%>.toString().trim());
@@ -1089,6 +1066,11 @@ if(columnList != null && columnList.size() > 0) {
columnIndex++;
}
}
if (isDynamic) {
%>
DynamicUtils.insertKeyInWhereClause(<%=incomingConnName%>.<%=getColumn(getDynamicColumn()).getName()%>, pstmt_<%=cid %>, <%=columnIndex%>, "<%=dbmsId%>", <%=whereSupportNull%>);
<%
}
%>
int checkCount_<%=cid%> = -1;
try (java.sql.ResultSet rs_<%=cid%> = pstmt_<%=cid %>.executeQuery()) {
@@ -1114,19 +1096,14 @@ if(columnList != null && columnList.size() > 0) {
}
}
if(isDynamic) {
Column dynamicColumn = getColumn(getDynamicColumn());
String typeToGenerate = JavaTypesManager.getTypeToGenerate(dynamicColumn.getColumn().getTalendType(), dynamicColumn.getColumn().isNullable());
if("Dynamic".equals(typeToGenerate)) {
if(isEnableDebug) {
%>
routines.system.DynamicUtils.debugDynamicSql(query_<%=cid%>,<%=incomingConnName%>.<%=dynamicColumn.getName()%>, <%=counterCol%>,updateSQLSplits_<%=cid%>);
<%
}
%>
int count_<%=cid%>=DynamicUtils.writeColumnsToDatabse(<%=incomingConnName%>.<%=dynamicColumn.getName()%>, pstmtUpdate_<%=cid%>, <%=counterCol-1%>, "<%=dbmsId%>");
<%
if(isEnableDebug) {
%>
routines.system.DynamicUtils.debugDynamicSql(query_<%=cid%>,<%=incomingConnName%>.<%=getDynamicColumn()%>, <%=counterCol%>,updateSQLSplits_<%=cid%>);
<%
}
%>
int count_<%=cid%>=DynamicUtils.writeColumnsToDatabse(<%=incomingConnName%>.<%=getDynamicColumn()%>, pstmtUpdate_<%=cid%>, <%=counterCol-1%>, "<%=dbmsId%>", true);
<%
}
for(Column column : colStruct) {
if(column.isUpdateKey()) {
@@ -1136,28 +1113,28 @@ if(columnList != null && columnList.size() > 0) {
<%
//#############for feature:2880
if(whereSupportNull && column.getColumn().isNullable()) {
if(isDynamic){
%>
<%=getManager(dbmsId, cid).generateSetBooleanForNullableKeyStmt(talendDynCol.getLabel(),column, counterCol, incomingConnName, cid, UPDATE_TYPE)%>
<%
}else{
%>
<%=getManager(dbmsId, cid).generateSetBooleanForNullableKeyStmt(column, counterCol, incomingConnName, cid, UPDATE_TYPE)%>
<%
}
if(isEnableDebug) {
if(isDynamic){
%>
query_<%=cid%> = <%=getManager(dbmsId, cid).retrieveSQL(talendDynCol.getLabel(),typeToGenerate, column, incomingConnName, cid, "query_" , counterCol, "updateSQLSplits_", "(("+incomingConnName+"."+column.getName()+"==null)?1:0)")%>;
<%
if(isDynamic){
%>
<%=getManager(dbmsId, cid).generateSetBooleanForNullableKeyStmt(column, counterCol, incomingConnName, cid, UPDATE_TYPE, " + count_")%>
<%
}else{
%>
query_<%=cid%> = <%=getManager(dbmsId, cid).retrieveSQL(typeToGenerate, column, incomingConnName, cid, "query_" , counterCol, "updateSQLSplits_", "(("+incomingConnName+"."+column.getName()+"==null)?1:0)")%>;
<%
%>
<%=getManager(dbmsId, cid).generateSetBooleanForNullableKeyStmt(column, counterCol, incomingConnName, cid, UPDATE_TYPE)%>
<%
}
if(isEnableDebug) {
if(isDynamic){
%>
query_<%=cid%> = <%=getManager(dbmsId, cid).retrieveSQL(talendDynCol.getLabel(),typeToGenerate, column, incomingConnName, cid, "query_" , counterCol, "updateSQLSplits_", "(("+incomingConnName+"."+column.getName()+"==null)?1:0)")%>;
<%
}else{
%>
query_<%=cid%> = <%=getManager(dbmsId, cid).retrieveSQL(typeToGenerate, column, incomingConnName, cid, "query_" , counterCol, "updateSQLSplits_", "(("+incomingConnName+"."+column.getName()+"==null)?1:0)")%>;
<%
}
}
counterCol++;
}
}
//#############
%>
<%=getManager(dbmsId, cid).generateSetStmt(typeToGenerate, column, counterCol, incomingConnName, cid, UPDATE_TYPE, " + count_")%>
@@ -1165,17 +1142,23 @@ if(columnList != null && columnList.size() > 0) {
if(isEnableDebug) {
if(isDynamic){
%>
query_<%=cid%> = <%=getManager(dbmsId, cid).retrieveSQL(talendDynCol.getLabel(),typeToGenerate, column, incomingConnName, cid, "query_" , counterCol, "updateSQLSplits_")%>;
query_<%=cid%> = <%=getManager(dbmsId, cid).retrieveSQL(talendDynCol.getLabel(),typeToGenerate, column, incomingConnName, cid, "query_" , counterCol, "updateSQLSplits_")%>;
<%
}else{
}else{
%>
query_<%=cid%> = <%=getManager(dbmsId, cid).retrieveSQL(typeToGenerate, column, incomingConnName, cid, "query_" , counterCol, "updateSQLSplits_")%>;
query_<%=cid%> = <%=getManager(dbmsId, cid).retrieveSQL(typeToGenerate, column, incomingConnName, cid, "query_" , counterCol, "updateSQLSplits_")%>;
<%
}
}
}
counterCol++;
}
}
if(isDynamic) {
%>
routines.system.DynamicUtils.insertKeyInWhereClause(<%=incomingConnName%>.<%=getDynamicColumn()%>, pstmtUpdate_<%=cid%>, (count_<%=cid%> + <%=counterCol%>), "<%=dbmsId%>", <%=whereSupportNull%>);
<%
}
if(isEnableDebug) {
%>
globalMap.put("<%=cid %>_QUERY", query_<%=cid%>.toString().trim());
@@ -1238,18 +1221,14 @@ if(columnList != null && columnList.size() > 0) {
}
}
if(isDynamic) {
Column dynamicColumn = getColumn(getDynamicColumn());
String typeToGenerate = JavaTypesManager.getTypeToGenerate(dynamicColumn.getColumn().getTalendType(), dynamicColumn.getColumn().isNullable());
if(isEnableDebug) {
%>
routines.system.DynamicUtils.debugDynamicSql(query_<%=cid%>,<%=incomingConnName%>.<%=dynamicColumn.getName()%>, <%=counterInsert%>,insertSQLSplits_<%=cid%>);
<%
}
if("Dynamic".equals(typeToGenerate)) {
%>
DynamicUtils.writeColumnsToDatabse(<%=incomingConnName%>.<%=dynamicColumn.getName()%>, pstmtInsert_<%=cid%>, <%=counterInsert-1%>, "<%=dbmsId%>");
<%
%>
routines.system.DynamicUtils.debugDynamicSql(query_<%=cid%>,<%=incomingConnName%>.<%=getDynamicColumn()%>, <%=counterInsert%>,insertSQLSplits_<%=cid%>);
<%
}
%>
DynamicUtils.writeColumnsToDatabse(<%=incomingConnName%>.<%=getDynamicColumn()%>, pstmtInsert_<%=cid%>, <%=counterInsert-1%>, "<%=dbmsId%>");
<%
}
if(isEnableDebug) {
%>
@@ -1316,70 +1295,70 @@ if(columnList != null && columnList.size() > 0) {
}
}
if(isDynamic) {
Column dynamicColumn = getColumn(getDynamicColumn());
String typeToGenerate = JavaTypesManager.getTypeToGenerate(dynamicColumn.getColumn().getTalendType(), dynamicColumn.getColumn().isNullable());
if("Dynamic".equals(typeToGenerate)) {
if(isEnableDebug) {
%>
routines.system.DynamicUtils.debugDynamicSql(query_<%=cid%>,<%=incomingConnName%>.<%=dynamicColumn.getName()%>, <%=counterColUpdate%>,updateSQLSplits_<%=cid%>);
<%
}
%>
int count_<%=cid%>=DynamicUtils.writeColumnsToDatabse(<%=incomingConnName%>.<%=dynamicColumn.getName()%>, pstmtUpdate_<%=cid%>, <%=counterColUpdate-1%>, "<%=dbmsId%>");
<%
if(isEnableDebug) {
%>
routines.system.DynamicUtils.debugDynamicSql(query_<%=cid%>,<%=incomingConnName%>.<%=getDynamicColumn()%>, <%=counterColUpdate%>,updateSQLSplits_<%=cid%>);
<%
}
%>
int count_<%=cid%>=DynamicUtils.writeColumnsToDatabse(<%=incomingConnName%>.<%=getDynamicColumn()%>, pstmtUpdate_<%=cid%>, <%=counterColUpdate-1%>, "<%=dbmsId%>", true);
<%
}
for(Column columnUpdate : colStruct) {
if(columnUpdate.isUpdateKey()) {
String typeToGenerate = JavaTypesManager.getTypeToGenerate(columnUpdate.getColumn().getTalendType(), columnUpdate.getColumn().isNullable());
String dbType = columnUpdate.getColumn().getType();
%>
<%
//#############for feature:2880 and 6980
if(whereSupportNull && columnUpdate.getColumn().isNullable()) {
if(isDynamic){
%>
<%=getManager(dbmsId, cid).generateSetBooleanForNullableKeyStmt(talendDynCol.getLabel(),columnUpdate, counterColUpdate, incomingConnName, cid, UPDATE_TYPE)%>
<%
}else{
%>
<%=getManager(dbmsId, cid).generateSetBooleanForNullableKeyStmt(columnUpdate, counterColUpdate, incomingConnName, cid, UPDATE_TYPE)%>
<%
if(whereSupportNull && columnUpdate.getColumn().isNullable()) {
if(isDynamic){
%>
<%=getManager(dbmsId, cid).generateSetBooleanForNullableKeyStmt(columnUpdate, counterColUpdate, incomingConnName, cid, UPDATE_TYPE, " + count_")%>
<%
}else{
%>
<%=getManager(dbmsId, cid).generateSetBooleanForNullableKeyStmt(columnUpdate, counterColUpdate, incomingConnName, cid, UPDATE_TYPE)%>
<%
}
if(isEnableDebug) {
if(isDynamic){
%>
query_<%=cid%> = <%=getManager(dbmsId, cid).retrieveSQL(talendDynCol.getLabel(),typeToGenerate, columnUpdate, incomingConnName, cid, "query_" , counterColUpdate, "updateSQLSplits_", "(("+incomingConnName+"."+columnUpdate.getName()+"==null)?1:0)")%>;
<%
} else {
%>
query_<%=cid%> = <%=getManager(dbmsId, cid).retrieveSQL(typeToGenerate, columnUpdate, incomingConnName, cid, "query_" , counterColUpdate, "updateSQLSplits_", "(("+incomingConnName+"."+columnUpdate.getName()+"==null)?1:0)")%>;
<%
}
}
counterColUpdate++;
}
//#############
%>
<%=getManager(dbmsId, cid).generateSetStmt(typeToGenerate, columnUpdate, counterColUpdate, incomingConnName, cid, UPDATE_TYPE, " + count_")%>
<%
if(isEnableDebug) {
if(isDynamic){
%>
query_<%=cid%> = <%=getManager(dbmsId, cid).retrieveSQL(talendDynCol.getLabel(),typeToGenerate, columnUpdate, incomingConnName, cid, "query_" , counterColUpdate, "updateSQLSplits_", "(("+incomingConnName+"."+columnUpdate.getName()+"==null)?1:0)")%>;
<%
}else{
%>
query_<%=cid%> = <%=getManager(dbmsId, cid).retrieveSQL(typeToGenerate, columnUpdate, incomingConnName, cid, "query_" , counterColUpdate, "updateSQLSplits_", "(("+incomingConnName+"."+columnUpdate.getName()+"==null)?1:0)")%>;
<%
%>
query_<%=cid%> = <%=getManager(dbmsId, cid).retrieveSQL(talendDynCol.getLabel(),typeToGenerate, columnUpdate, incomingConnName, cid, "query_" , counterColUpdate, "updateSQLSplits_")%>;
<%
} else {
%>
query_<%=cid%> = <%=getManager(dbmsId, cid).retrieveSQL(typeToGenerate, columnUpdate, incomingConnName, cid, "query_" , counterColUpdate, "updateSQLSplits_")%>;
<%
}
}
counterColUpdate++;
}
//#############
%>
<%=getManager(dbmsId, cid).generateSetStmt(typeToGenerate, columnUpdate, counterColUpdate, incomingConnName, cid, UPDATE_TYPE, " + count_")%>
<%
if(isEnableDebug) {
if(isDynamic){
%>
query_<%=cid%> = <%=getManager(dbmsId, cid).retrieveSQL(talendDynCol.getLabel(),typeToGenerate, columnUpdate, incomingConnName, cid, "query_" , counterColUpdate, "updateSQLSplits_")%>;
<%
}else{
%>
query_<%=cid%> = <%=getManager(dbmsId, cid).retrieveSQL(typeToGenerate, columnUpdate, incomingConnName, cid, "query_" , counterColUpdate, "updateSQLSplits_")%>;
<%
}
}
counterColUpdate++;
}
}
if(isDynamic) {
%>
routines.system.DynamicUtils.insertKeyInWhereClause(<%=incomingConnName%>.<%=getDynamicColumn()%>, pstmtUpdate_<%=cid%>, (count_<%=cid%> + <%=counterColUpdate%>), "<%=dbmsId%>", <%=whereSupportNull%>);
<%
}
if(isEnableDebug) {
%>
globalMap.put("<%=cid %>_QUERY", query_<%=cid%>.toString().trim());
@@ -1416,18 +1395,14 @@ if(columnList != null && columnList.size() > 0) {
}
}
if(isDynamic) {
Column dynamicColumn = getColumn(getDynamicColumn());
String typeToGenerate = JavaTypesManager.getTypeToGenerate(dynamicColumn.getColumn().getTalendType(), dynamicColumn.getColumn().isNullable());
if("Dynamic".equals(typeToGenerate)) {
if(isEnableDebug) {
%>
routines.system.DynamicUtils.debugDynamicSql(query_<%=cid%>,<%=incomingConnName%>.<%=dynamicColumn.getName()%>, <%=counter%>,insertSQLSplits_<%=cid%>);
<%
}
%>
DynamicUtils.writeColumnsToDatabse(<%=incomingConnName%>.<%=dynamicColumn.getName()%>, pstmtInsert_<%=cid%>, <%=counter-1%>, "<%=dbmsId%>");
<%
if(isEnableDebug) {
%>
routines.system.DynamicUtils.debugDynamicSql(query_<%=cid%>,<%=incomingConnName%>.<%=getDynamicColumn()%>, <%=counter%>,insertSQLSplits_<%=cid%>);
<%
}
%>
DynamicUtils.writeColumnsToDatabse(<%=incomingConnName%>.<%=getDynamicColumn()%>, pstmtInsert_<%=cid%>, <%=counter-1%>, "<%=dbmsId%>");
<%
}
if(isEnableDebug) {
%>
@@ -1508,6 +1483,12 @@ if(columnList != null && columnList.size() > 0) {
keyCounter++;
}
}
if(isDynamic) {
%>
routines.system.DynamicUtils.insertKeyInWhereClause(<%=incomingConnName%>.<%=getDynamicColumn()%>, pstmt_<%=cid%>, <%=keyCounter%>, "<%=dbmsId%>", <%=whereSupportNull%>);
<%
}
if(isEnableDebug) {
%>
globalMap.put("<%=cid %>_QUERY", query_<%=cid%>.toString().trim());
@@ -1589,6 +1570,11 @@ if(columnList != null && columnList.size() > 0) {
counter++;
}
}
if(isDynamic) {
%>
DynamicUtils.writeColumnsToDatabse(<%=incomingConnName%>.<%=getDynamicColumn()%>, pstmt_<%=cid%>, <%=counter-1%>, "<%=dbmsId%>");
<%
}
if(isEnableDebug) {
%>
@@ -1654,12 +1640,17 @@ if(columnList != null && columnList.size() > 0) {
counter++;
}
}
if(isDynamic) {
%>
int count_<%=cid%> = DynamicUtils.writeColumnsToDatabse(<%=incomingConnName%>.<%=getDynamicColumn()%>, pstmt_<%=cid%>, <%=counter-1%>, "<%=dbmsId%>");
<%
}
for(Column column : colStruct) {
if(column.isUpdatable()) {
String typeToGenerate = JavaTypesManager.getTypeToGenerate(column.getColumn().getTalendType(), column.getColumn().isNullable());
%>
<%=getManager(dbmsId, cid).generateSetStmt(typeToGenerate, column, counter, incomingConnName, cid, NORMAL_TYPE)%>
<%=getManager(dbmsId, cid).generateSetStmt(typeToGenerate, column, counter, incomingConnName, cid, NORMAL_TYPE, " + count_")%>
<%
if(isEnableDebug) {
%>
@@ -1674,6 +1665,11 @@ if(columnList != null && columnList.size() > 0) {
globalMap.put("<%=cid %>_QUERY", query_<%=cid%>.toString().trim());
<%
}
if(isDynamic) {
%>
DynamicUtils.writeColumnsToDatabse(<%=incomingConnName%>.<%=getDynamicColumn()%>, pstmt_<%=cid%>, (count_<%=cid%> + <%=counter-1%>), "<%=dbmsId%>", true);
<%
}
%>
int count_on_duplicate_key_<%=cid%> = 0;
try {
@@ -1734,6 +1730,11 @@ if(columnList != null && columnList.size() > 0) {
}
}
if(isDynamic) {
%>
DynamicUtils.writeColumnsToDatabse(<%=incomingConnName%>.<%=getDynamicColumn()%>, pstmt_<%=cid%>, <%=counter-1%>, "<%=dbmsId%>");
<%
}
if(isEnableDebug) {
%>
globalMap.put("<%=cid %>_QUERY", query_<%=cid%>.toString().trim());

View File

@@ -1140,12 +1140,18 @@ public class CLASS {
return setStmt.toString();
}
protected String generateSetBooleanForNullableKeyStmt(String dynCol,Column column, int index, String incomingConnName, String cid,
protected String generateSetBooleanForNullableKeyStmt(String dynCol, Column column, int index, String incomingConnName, String cid,
int actionType) {
return generateSetBooleanForNullableKeyStmt(column, (incomingConnName+"."+dynCol+".getColumnCount()+"+index), incomingConnName, cid, actionType);
}
protected String generateSetBooleanForNullableKeyStmt(Column column, int index, String incomingConnName, String cid,
int actionType, String dynamic) {
return generateSetBooleanForNullableKeyStmt(column, (index + dynamic + cid), incomingConnName, cid, actionType);
}
protected String generateSetBooleanForNullableKeyStmt(Column column, String index, String incomingConnName, String cid,
int actionType) {
String dynamicIndex=""+index;
if(dynCol!=null){
dynamicIndex = incomingConnName+"."+dynCol+".getColumnCount()+"+index;
}
String prefix = null;
if (actionType == NORMAL_TYPE) {
prefix = "pstmt_";
@@ -1156,7 +1162,7 @@ public class CLASS {
}
StringBuilder setStmt = new StringBuilder();
//TODO generate setXXXX code according to each db .
setStmt.append(prefix + cid + ".setInt(" + dynamicIndex + ", ((" + incomingConnName + "." + column.getName() + "==null)?1:0));\r\n");
setStmt.append(prefix + cid + ".setInt(" + index + ", ((" + incomingConnName + "." + column.getName() + "==null)?1:0));\r\n");
return setStmt.toString();
}
@@ -1165,7 +1171,7 @@ public class CLASS {
//need all db to implement.
protected String generateSetBooleanForNullableKeyStmt(Column column, int index, String incomingConnName, String cid,
int actionType) {
return generateSetBooleanForNullableKeyStmt(null, column, index, incomingConnName, cid, actionType);
return generateSetBooleanForNullableKeyStmt(column, ""+index, incomingConnName, cid, actionType);
}
public String getCopyFromCSVSQL(List<IMetadataColumn> columnList,
@@ -1214,6 +1220,45 @@ public class CLASS {
return false;
}
protected String getInsertQueryForDynamicSchema(String connection, String tableName, String insertColumnNames, String insertValues, String dataAction) {
StringBuilder statementQuery = new StringBuilder();
String quote = "\"";
String dot = ".";
String plus = "+";
String comma = ",";
StringBuilder queryPrefix = new StringBuilder("String ");
if ("INSERT_IGNORE".equals(dataAction)) {
queryPrefix.append("insert_").append(cid).append(" = ").append(quote).append("INSERT IGNORE INTO ");
} else if ("REPLACE".equals(dataAction)) {
queryPrefix.append("replace_").append(cid).append(" = ").append(quote).append("REPLACE INTO ");
} else if ("INSERT_ON_DUPLICATE_KEY_UPDATE".equals(dataAction)) {
queryPrefix.append("insertIgnore_").append(cid).append(" = ").append(quote).append("INSERT IGNORE INTO ");
} else {
queryPrefix.append("insert_").append(cid).append(" = ").append(quote).append("INSERT INTO ");
}
statementQuery.append(queryPrefix).append(getLProtectedChar()).append(quote).append(plus).append(tableName).append(cid).append(plus).append(quote).append(getRProtectedChar()).append(" (").append(quote).append(plus)
.append("DynamicUtils.getInsertIntoStmtColumnsList(").append(connection).append(dot).append(getDynamicColumn()).append(comma).append(quote).append(getDBMSId()).append(quote).append(comma).append(" new StringBuilder(").append(quote).append(insertColumnNames).append(quote).append("))").append(plus)
.append(quote).append(") VALUES (").append(quote).append(plus)
.append("DynamicUtils.getInsertIntoStmtValuesList(").append(connection).append(dot).append(getDynamicColumn()).append(comma).append(quote).append(getDBMSId()).append(quote).append(comma).append(" new StringBuilder(").append(quote).append(insertValues).append(quote).append("))").append(plus)
.append(quote).append(")").append(quote);
return statementQuery.toString();
}
protected String getUpdateQueryForDynamicSchema(String connection, String tableName, String updateSetStmt, String updateWhereStmt, boolean supportNullWhere) {
StringBuilder statementQuery = new StringBuilder();
String quote = "\"";
String dot = ".";
String plus = "+";
String comma = ",";
statementQuery.append("String update_").append(cid).append(" = ").append(quote).append("UPDATE ").append(getLProtectedChar()).append(quote).append(plus).append(tableName).append(cid).append(plus).append(quote).append(getRProtectedChar()).append(" SET ").append(quote).append(plus)
.append("DynamicUtils.getUpdateSet(").append(connection).append(dot).append(getDynamicColumn()).append(comma).append(quote).append(getDBMSId()).append(quote).append(comma).append(" new StringBuilder(").append(quote).append(updateSetStmt).append(quote).append("))").append(plus)
.append(quote).append(" WHERE ").append(quote).append(plus)
.append("DynamicUtils.getUpdateWhere(").append(connection).append(dot).append(getDynamicColumn()).append(comma).append(quote).append(getDBMSId()).append(quote).append(comma).append(" new StringBuilder(").append(quote).append(updateWhereStmt).append(quote).append(")").append(comma).append(supportNullWhere).append(")");
return statementQuery.toString();
}
}
public class AS400Manager extends Manager {