diff --git a/migration/i1.0a-release/oracle/201304241518_UUIDGen.sql b/migration/i1.0a-release/oracle/201304241518_UUIDGen.sql new file mode 100644 index 0000000000..3f93c4f129 --- /dev/null +++ b/migration/i1.0a-release/oracle/201304241518_UUIDGen.sql @@ -0,0 +1,20 @@ +-- Apr 24, 2013 3:12:21 PM COT +-- UUID Generator +UPDATE AD_Role_OrgAccess SET AD_Role_OrgAccess_UU='fcc1cd49-542c-4647-8572-966a7d05a4dd',Updated=TO_DATE('2013-04-24 15:12:21','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Role_ID=50004 AND AD_Org_ID=0 +; + +-- Apr 24, 2013 3:12:21 PM COT +UPDATE AD_Role_OrgAccess SET AD_Role_OrgAccess_UU='4f0274ce-7551-48d0-ab52-98a5aed37787',Updated=TO_DATE('2013-04-24 15:12:21','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Role_ID=50004 AND AD_Org_ID=11 +; + +-- Apr 24, 2013 3:12:21 PM COT +UPDATE AD_Role_OrgAccess SET AD_Role_OrgAccess_UU='26832dd7-5711-4e8f-a1c6-5b4a049f3726',Updated=TO_DATE('2013-04-24 15:12:21','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Role_ID=50004 AND AD_Org_ID=12 +; + +-- Apr 24, 2013 3:12:58 PM COT +UPDATE AD_Message SET AD_Message_UU='07252108-a99a-4746-873a-6dceed406b0c' WHERE AD_Message_ID=20001 +; + +SELECT register_migration_script('201304241518_UUIDGen.sql') FROM dual +; + diff --git a/migration/i1.0a-release/postgresql/201304241518_UUIDGen.sql b/migration/i1.0a-release/postgresql/201304241518_UUIDGen.sql new file mode 100644 index 0000000000..cf50c7ed35 --- /dev/null +++ b/migration/i1.0a-release/postgresql/201304241518_UUIDGen.sql @@ -0,0 +1,20 @@ +-- Apr 24, 2013 3:12:21 PM COT +-- UUID Generator +UPDATE AD_Role_OrgAccess SET AD_Role_OrgAccess_UU='fcc1cd49-542c-4647-8572-966a7d05a4dd',Updated=TO_TIMESTAMP('2013-04-24 15:12:21','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Role_ID=50004 AND AD_Org_ID=0 +; + +-- Apr 24, 2013 3:12:21 PM COT +UPDATE AD_Role_OrgAccess SET AD_Role_OrgAccess_UU='4f0274ce-7551-48d0-ab52-98a5aed37787',Updated=TO_TIMESTAMP('2013-04-24 15:12:21','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Role_ID=50004 AND AD_Org_ID=11 +; + +-- Apr 24, 2013 3:12:21 PM COT +UPDATE AD_Role_OrgAccess SET AD_Role_OrgAccess_UU='26832dd7-5711-4e8f-a1c6-5b4a049f3726',Updated=TO_TIMESTAMP('2013-04-24 15:12:21','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Role_ID=50004 AND AD_Org_ID=12 +; + +-- Apr 24, 2013 3:12:58 PM COT +UPDATE AD_Message SET AD_Message_UU='07252108-a99a-4746-873a-6dceed406b0c' WHERE AD_Message_ID=20001 +; + +SELECT register_migration_script('201304241518_UUIDGen.sql') FROM dual +; + diff --git a/org.adempiere.base/src/org/adempiere/process/UUIDGenerator.java b/org.adempiere.base/src/org/adempiere/process/UUIDGenerator.java index 2ccc945bd8..08a4f0f8f4 100644 --- a/org.adempiere.base/src/org/adempiere/process/UUIDGenerator.java +++ b/org.adempiere.base/src/org/adempiere/process/UUIDGenerator.java @@ -58,16 +58,14 @@ public class UUIDGenerator extends SvrProcess { */ @Override protected void prepare() { - ProcessInfoParameter[] parameters = getProcessInfo().getParameter(); - if (parameters == null || parameters.length == 0) - return; - for(ProcessInfoParameter param : parameters) { - if (param.getParameterName().equals("TableName")) { + for(ProcessInfoParameter param : getParameter()) { + if (param.getParameter() == null) + ; + else if (param.getParameterName().equals("TableName")) tableName = param.getParameter().toString(); - break; - } + else + log.log(Level.SEVERE, "Unknown Parameter: " + param.getParameterName()); } - } /** @@ -81,15 +79,12 @@ public class UUIDGenerator extends SvrProcess { tableName = tableName.trim(); if (!tableName.endsWith("%")) tableName = tableName + "%"; - StringBuilder sql = new StringBuilder("SELECT AD_Table_ID, TableName FROM AD_Table WHERE TableName like ? AND IsView = 'N' AND IsActive='Y'"); - if (DB.isOracle()) { - sql.append(" ESCAPE '\' "); - } + String sql = "SELECT AD_Table_ID, TableName FROM AD_Table WHERE TableName LIKE ? AND IsView = 'N' AND IsActive='Y'"; PreparedStatement stmt = null; ResultSet rs = null; int count = 0; try { - stmt = DB.prepareStatement(sql.toString(), null); + stmt = DB.prepareStatement(sql, null); stmt.setString(1, tableName); rs = stmt.executeQuery(); while(rs.next()) { @@ -122,12 +117,27 @@ public class UUIDGenerator extends SvrProcess { mColumn.setName(columnName); mColumn.setVersion(Env.ONE); mColumn.saveEx(); + AD_Column_ID = mColumn.getAD_Column_ID(); syncColumn(mColumn); //update db + // COMMENT NEXT LINE ON RELEASE WORK updateUUID(mColumn, null); } + + /* + // RELEASE WORK CODE + // following code could be used potentially to fill empty values on UU columns if they are already created + int cnt = DB.getSQLValue(null, "SELECT COUNT(1) FROM " + cTableName + " WHERE " + columnName + " IS NULL"); + if (cnt > 0) { + addLog (0, null, null, cTableName); + //update db + updateAllUUID(MColumn.get(getCtx(), AD_Column_ID)); + } + // END RELEASE WORK CODE + */ + } } finally { DB.close(rs,stmt); @@ -322,4 +332,68 @@ public class UUIDGenerator extends SvrProcess { } } } + + /* + // RELEASE WORK CODE + public static void updateAllUUID(MColumn column) { + MTable table = (MTable) column.getAD_Table(); + int AD_Column_ID = DB.getSQLValue(null, "SELECT AD_Column_ID FROM AD_Column WHERE AD_Table_ID=? AND ColumnName=?", table.getAD_Table_ID(), table.getTableName()+"_ID"); + StringBuffer sql = new StringBuffer("SELECT "); + String keyColumn = null; + + // second script - just generate for tables with _ID primary key + //if (AD_Column_ID > 0) + // return; + + if (AD_Column_ID > 0) { + keyColumn = table.getTableName()+"_ID"; + } else if (DB.isOracle()) { + keyColumn = "rowid"; + } else if (DB.isPostgreSQL()) { + keyColumn = "ctid"; + } + // keyColumn = "*"; + sql.append(keyColumn).append(",").append(table.getTableName()).append(".* FROM ").append(table.getTableName()); + sql.append(" WHERE ").append(column.getColumnName()).append(" IS NULL "); + String updateSQL = null; + PreparedStatement stmt = null; + ResultSet rs = null; + Trx trx = null; + try { + trx = Trx.get(Trx.createTrxName("UUIDGen"), true); + trx.start(); + stmt = DB.prepareStatement(sql.toString(), trx.getTrxName()); + stmt.setFetchSize(100); + rs = stmt.executeQuery(); + while (rs.next()) { + if (AD_Column_ID > 0) { + int recordId = rs.getInt(1); + UUID uuid = UUID.randomUUID(); + updateSQL = "UPDATE "+table.getTableName()+" SET "+column.getColumnName()+"='" + uuid.toString() + "' WHERE "+keyColumn+"="+recordId; + DB.executeUpdateEx(updateSQL,null); + } else { + UUID uuid = UUID.randomUUID(); + // String rowId = rs.getString(1); + // DB.executeUpdateEx(updateSQL+"'"+rowId+"'",new Object[]{uuid.toString()},null); + PO po = table.getPO(rs, null); + if (po.get_KeyColumns().length > 0) { + po.set_ValueOfColumn(column.getColumnName(), uuid.toString()); + po.saveEx(); + } + } + } + trx.commit(); + } catch (SQLException e) { + if (trx != null) + trx.rollback(); + throw new DBException(e); + } finally { + DB.close(rs, stmt); + if (trx != null) + trx.close(); + } + } + // END RELEASE WORK CODE + */ + }