Author: tomdz
Date: Wed Dec 30 07:49:27 2009
New Revision: 894556
URL: http://svn.apache.org/viewvc?rev=894556&view=rev
Log:
Added equivalence for on delete/on update settings
Modified:
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/PlatformInfo.java
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/alteration/ModelComparator.java
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/JdbcModelReader.java
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/derby/DerbyPlatform.java
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/mssql/MSSqlPlatform.java
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/oracle/Oracle8Platform.java
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/sapdb/SapDbPlatform.java
db/ddlutils/trunk/src/test/java/org/apache/ddlutils/TestAgainstLiveDatabaseBase.java
db/ddlutils/trunk/src/test/resources/jdbc.properties.db2
db/ddlutils/trunk/src/test/resources/jdbc.properties.firebird
db/ddlutils/trunk/src/test/resources/jdbc.properties.maxdb
db/ddlutils/trunk/src/test/resources/jdbc.properties.oracle10
db/ddlutils/trunk/src/test/resources/jdbc.properties.postgresql
db/ddlutils/trunk/src/test/resources/jdbc.properties.sqlserver2005
Modified: db/ddlutils/trunk/src/main/java/org/apache/ddlutils/PlatformInfo.java
URL:
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/main/java/org/apache/ddlutils/PlatformInfo.java?rev=894556&r1=894555&r2=894556&view=diff
==============================================================================
--- db/ddlutils/trunk/src/main/java/org/apache/ddlutils/PlatformInfo.java
(original)
+++ db/ddlutils/trunk/src/main/java/org/apache/ddlutils/PlatformInfo.java Wed
Dec 30 07:49:27 2009
@@ -24,6 +24,7 @@
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -180,6 +181,12 @@
/** Contains the supported ON DELETE actions. */
private HashSet _supportedOnDeleteActions = new HashSet();
+ /** Contains for each ON UPDATE action the list of equivalent actions. */
+ private HashMap _equivalentOnUpdateActions = new HashMap();
+
+ /** Contains for each ON DELETE action the list of equivalent actions. */
+ private HashMap _equivalentOnDeleteActions = new HashMap();
+
/**
* Creates a new platform info object.
*/
@@ -1276,4 +1283,92 @@
{
_defaultOnDeleteAction = defaultOnDeleteAction;
}
+
+ /**
+ * Registers the given pair of ON UPDATE actions to be equivalent.
Equivalent actions will not
+ * cause a foreign key to be changed/recreated when altering a database.
+ *
+ * @param actionA The first action
+ * @param actionB The second action
+ */
+ public void addEquivalentOnUpdateActions(CascadeActionEnum actionA,
CascadeActionEnum actionB)
+ {
+ if (!actionA.equals(actionB))
+ {
+ Set actionsEquivalentToActionA =
(Set)_equivalentOnUpdateActions.get(actionA);
+ Set actionsEquivalentToActionB =
(Set)_equivalentOnUpdateActions.get(actionB);
+
+ if (actionsEquivalentToActionA == null)
+ {
+ actionsEquivalentToActionA = new HashSet();
+ _equivalentOnUpdateActions.put(actionA,
actionsEquivalentToActionA);
+ }
+ if (actionsEquivalentToActionB == null)
+ {
+ actionsEquivalentToActionB = new HashSet();
+ _equivalentOnUpdateActions.put(actionB,
actionsEquivalentToActionB);
+ }
+ actionsEquivalentToActionA.add(actionB);
+ actionsEquivalentToActionB.add(actionA);
+ }
+ }
+
+ /**
+ * Determiones whether the two ON UPDATE actions are equivalent.
Equivalent actions will not
+ * cause a foreign key to be changed/recreated when altering a database.
+ *
+ * @param actionA The first action
+ * @param actionB The second action
+ * @return <code>true</code> if the two actions are equivalent
+ */
+ public boolean areEquivalentOnUpdateActions(CascadeActionEnum actionA,
CascadeActionEnum actionB)
+ {
+ Set actionsEquivalentToActionA =
(Set)_equivalentOnUpdateActions.get(actionA);
+
+ return actionsEquivalentToActionA == null ? false :
actionsEquivalentToActionA.contains(actionB);
+ }
+
+ /**
+ * Registers the given pair of ON DELETE actions to be equivalent.
Equivalent actions will not
+ * cause a foreign key to be changed/recreated when altering a database.
+ *
+ * @param actionA The first action
+ * @param actionB The second action
+ */
+ public void addEquivalentOnDeleteActions(CascadeActionEnum actionA,
CascadeActionEnum actionB)
+ {
+ if (!actionA.equals(actionB))
+ {
+ Set actionsEquivalentToActionA =
(Set)_equivalentOnDeleteActions.get(actionA);
+ Set actionsEquivalentToActionB =
(Set)_equivalentOnDeleteActions.get(actionB);
+
+ if (actionsEquivalentToActionA == null)
+ {
+ actionsEquivalentToActionA = new HashSet();
+ _equivalentOnDeleteActions.put(actionA,
actionsEquivalentToActionA);
+ }
+ if (actionsEquivalentToActionB == null)
+ {
+ actionsEquivalentToActionB = new HashSet();
+ _equivalentOnDeleteActions.put(actionB,
actionsEquivalentToActionB);
+ }
+ actionsEquivalentToActionA.add(actionB);
+ actionsEquivalentToActionB.add(actionA);
+ }
+ }
+
+ /**
+ * Determiones whether the two ON DELETE actions are equivalent.
Equivalent actions will not
+ * cause a foreign key to be changed/recreated when altering a database.
+ *
+ * @param actionA The first action
+ * @param actionB The second action
+ * @return <code>true</code> if the two actions are equivalent
+ */
+ public boolean areEquivalentOnDeleteActions(CascadeActionEnum actionA,
CascadeActionEnum actionB)
+ {
+ Set actionsEquivalentToActionA =
(Set)_equivalentOnDeleteActions.get(actionA);
+
+ return actionsEquivalentToActionA == null ? false :
actionsEquivalentToActionA.contains(actionB);
+ }
}
Modified:
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/alteration/ModelComparator.java
URL:
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/main/java/org/apache/ddlutils/alteration/ModelComparator.java?rev=894556&r1=894555&r2=894556&view=diff
==============================================================================
---
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/alteration/ModelComparator.java
(original)
+++
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/alteration/ModelComparator.java
Wed Dec 30 07:49:27 2009
@@ -373,6 +373,7 @@
tableDefinitionChanges.addAll(checkForAddedColumns(sourceModel,
sourceTable, intermediateModel, intermediateTable, targetModel, targetTable));
tableDefinitionChanges.addAll(checkForPrimaryKeyChanges(sourceModel,
sourceTable, intermediateModel, intermediateTable, targetModel, targetTable));
+ // TOOD: check for foreign key changes (on delete/on update)
if (!tableDefinitionChanges.isEmpty())
{
if ((_tableDefCangePredicate == null) ||
_tableDefCangePredicate.areSupported(tmpTable, tableDefinitionChanges))
Modified:
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/JdbcModelReader.java
URL:
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/JdbcModelReader.java?rev=894556&r1=894555&r2=894556&view=diff
==============================================================================
---
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/JdbcModelReader.java
(original)
+++
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/JdbcModelReader.java
Wed Dec 30 07:49:27 2009
@@ -933,12 +933,11 @@
CascadeActionEnum onUpdateAction =
convertAction((Short)values.get("UPDATE_RULE"));
CascadeActionEnum onDeleteAction =
convertAction((Short)values.get("DELETE_RULE"));
- // Some JDBC drivers lie and return actions that the DB not
actually supports
- if ((onUpdateAction == null) ||
!getPlatformInfo().isActionSupportedForOnUpdate(onUpdateAction))
+ if (onUpdateAction == null)
{
onUpdateAction = getPlatformInfo().getDefaultOnUpdateAction();
}
- if ((onDeleteAction == null) ||
!getPlatformInfo().isActionSupportedForOnDelete(onDeleteAction))
+ if (onDeleteAction == null)
{
onDeleteAction = getPlatformInfo().getDefaultOnDeleteAction();
}
Modified:
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/derby/DerbyPlatform.java
URL:
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/derby/DerbyPlatform.java?rev=894556&r1=894555&r2=894556&view=diff
==============================================================================
---
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/derby/DerbyPlatform.java
(original)
+++
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/derby/DerbyPlatform.java
Wed Dec 30 07:49:27 2009
@@ -64,8 +64,11 @@
info.addNativeTypeMapping(Types.DOUBLE, "DOUBLE");
info.addNativeTypeMapping(Types.FLOAT, "DOUBLE", Types.DOUBLE);
info.setSupportedOnUpdateActions(new CascadeActionEnum[] {
CascadeActionEnum.NONE, CascadeActionEnum.RESTRICT });
+ info.setDefaultOnUpdateAction(CascadeActionEnum.NONE);
+ info.addEquivalentOnUpdateActions(CascadeActionEnum.NONE,
CascadeActionEnum.RESTRICT);
info.setSupportedOnDeleteActions(new CascadeActionEnum[] {
CascadeActionEnum.NONE, CascadeActionEnum.RESTRICT,
CascadeActionEnum.CASCADE, CascadeActionEnum.SET_NULL });
+ info.setDefaultOnDeleteAction(CascadeActionEnum.NONE);
setSqlBuilder(new DerbyBuilder(this));
setModelReader(new DerbyModelReader(this));
Modified:
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/mssql/MSSqlPlatform.java
URL:
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/mssql/MSSqlPlatform.java?rev=894556&r1=894555&r2=894556&view=diff
==============================================================================
---
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/mssql/MSSqlPlatform.java
(original)
+++
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/mssql/MSSqlPlatform.java
Wed Dec 30 07:49:27 2009
@@ -77,7 +77,9 @@
info.setIdentityColumnAutomaticallyRequired(true);
info.setMultipleIdentityColumnsSupported(false);
info.setSupportedOnUpdateActions(new CascadeActionEnum[] {
CascadeActionEnum.CASCADE, CascadeActionEnum.NONE });
+ info.addEquivalentOnUpdateActions(CascadeActionEnum.NONE,
CascadeActionEnum.RESTRICT);
info.setSupportedOnDeleteActions(new CascadeActionEnum[] {
CascadeActionEnum.CASCADE, CascadeActionEnum.NONE });
+ info.addEquivalentOnDeleteActions(CascadeActionEnum.NONE,
CascadeActionEnum.RESTRICT);
info.addNativeTypeMapping(Types.ARRAY, "IMAGE",
Types.LONGVARBINARY);
// BIGINT will be mapped back to BIGINT by the model reader
Modified:
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/oracle/Oracle8Platform.java
URL:
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/oracle/Oracle8Platform.java?rev=894556&r1=894555&r2=894556&view=diff
==============================================================================
---
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/oracle/Oracle8Platform.java
(original)
+++
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/oracle/Oracle8Platform.java
Wed Dec 30 07:49:27 2009
@@ -74,6 +74,7 @@
info.setPrimaryKeyColumnAutomaticallyRequired(true);
info.setSupportedOnUpdateActions(new CascadeActionEnum[] {
CascadeActionEnum.NONE });
info.setSupportedOnDeleteActions(new CascadeActionEnum[] {
CascadeActionEnum.CASCADE, CascadeActionEnum.SET_NULL, CascadeActionEnum.NONE
});
+ info.addEquivalentOnDeleteActions(CascadeActionEnum.NONE,
CascadeActionEnum.RESTRICT);
// Note that the back-mappings are partially done by the model reader,
not the driver
info.addNativeTypeMapping(Types.ARRAY, "BLOB",
Types.BLOB);
Modified:
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/sapdb/SapDbPlatform.java
URL:
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/sapdb/SapDbPlatform.java?rev=894556&r1=894555&r2=894556&view=diff
==============================================================================
---
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/sapdb/SapDbPlatform.java
(original)
+++
db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/sapdb/SapDbPlatform.java
Wed Dec 30 07:49:27 2009
@@ -67,9 +67,10 @@
info.setMultipleIdentityColumnsSupported(false);
info.setCommentPrefix("/*");
info.setCommentSuffix("*/");
- info.setSupportedOnUpdateActions(new CascadeActionEnum[] {
CascadeActionEnum.NONE });
- info.setDefaultOnDeleteAction(CascadeActionEnum.RESTRICT);
info.setSupportedOnDeleteActions(new CascadeActionEnum[] {
CascadeActionEnum.CASCADE, CascadeActionEnum.RESTRICT,
CascadeActionEnum.SET_DEFAULT, CascadeActionEnum.SET_NULL,
CascadeActionEnum.NONE });
+ info.addEquivalentOnDeleteActions(CascadeActionEnum.NONE,
CascadeActionEnum.RESTRICT);
+ info.setSupportedOnUpdateActions(new CascadeActionEnum[] {
CascadeActionEnum.NONE });
+ info.addEquivalentOnUpdateActions(CascadeActionEnum.NONE,
CascadeActionEnum.RESTRICT);
// BIGINT is also handled by the model reader
// Unfortunately there is no way to distinguish between REAL, and
FLOAT/DOUBLE when
Modified:
db/ddlutils/trunk/src/test/java/org/apache/ddlutils/TestAgainstLiveDatabaseBase.java
URL:
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/test/java/org/apache/ddlutils/TestAgainstLiveDatabaseBase.java?rev=894556&r1=894555&r2=894556&view=diff
==============================================================================
---
db/ddlutils/trunk/src/test/java/org/apache/ddlutils/TestAgainstLiveDatabaseBase.java
(original)
+++
db/ddlutils/trunk/src/test/java/org/apache/ddlutils/TestAgainstLiveDatabaseBase.java
Wed Dec 30 07:49:27 2009
@@ -53,7 +53,6 @@
import org.apache.ddlutils.io.DataReader;
import org.apache.ddlutils.io.DataToDatabaseSink;
import org.apache.ddlutils.io.DatabaseIO;
-import org.apache.ddlutils.model.CascadeActionEnum;
import org.apache.ddlutils.model.CloneHelper;
import org.apache.ddlutils.model.Column;
import org.apache.ddlutils.model.Database;
@@ -1312,35 +1311,12 @@
getPlatform().getSqlBuilder().shortenName(actual.getForeignTableName().toUpperCase(),
getSqlBuilder().getMaxTableNameLength()));
}
- CascadeActionEnum realExpectedOnUpdateAction = expected.getOnUpdate();
- CascadeActionEnum realActualOnUpdateAction = actual.getOnUpdate();
-
- if
(!getPlatformInfo().isActionSupportedForOnUpdate(realExpectedOnUpdateAction) ||
(realExpectedOnUpdateAction == CascadeActionEnum.NONE))
- {
- realExpectedOnUpdateAction =
getPlatformInfo().getDefaultOnUpdateAction();
- }
- if
(!getPlatformInfo().isActionSupportedForOnUpdate(realActualOnUpdateAction) ||
(realActualOnUpdateAction == CascadeActionEnum.NONE))
- {
- realActualOnUpdateAction =
getPlatformInfo().getDefaultOnUpdateAction();
- }
- assertEquals("Not the same onUpdate setting in foreign key
"+actual.getName()+".",
- realExpectedOnUpdateAction,
- realActualOnUpdateAction);
-
- CascadeActionEnum realExpectedOnDeleteAction = expected.getOnDelete();
- CascadeActionEnum realActualOnDeleteAction = actual.getOnDelete();
-
- if
(!getPlatformInfo().isActionSupportedForOnDelete(realExpectedOnDeleteAction) ||
(realExpectedOnDeleteAction == CascadeActionEnum.NONE))
- {
- realExpectedOnDeleteAction =
getPlatformInfo().getDefaultOnDeleteAction();
- }
- if
(!getPlatformInfo().isActionSupportedForOnDelete(realActualOnDeleteAction) ||
(realActualOnDeleteAction == CascadeActionEnum.NONE))
- {
- realActualOnDeleteAction =
getPlatformInfo().getDefaultOnDeleteAction();
- }
- assertEquals("Not the same onDelete setting in foreign key
"+actual.getName()+".",
- realExpectedOnDeleteAction,
- realActualOnDeleteAction);
+ assertTrue("Not the same onUpdate setting in foreign key
"+actual.getName()+": expected = "+expected.getOnUpdate()+", actual =
"+actual.getOnUpdate(),
+ expected.getOnUpdate().equals(actual.getOnUpdate()) ||
+
getPlatformInfo().areEquivalentOnUpdateActions(expected.getOnUpdate(),
actual.getOnUpdate()));
+ assertTrue("Not the same onDelete setting in foreign key
"+actual.getName()+": expected = "+expected.getOnDelete()+", actual =
"+actual.getOnDelete(),
+ expected.getOnDelete().equals(actual.getOnDelete()) ||
+
getPlatformInfo().areEquivalentOnDeleteActions(expected.getOnDelete(),
actual.getOnDelete()));
assertEquals("Not the same number of references in foreign key
"+actual.getName()+".",
expected.getReferenceCount(),
Modified: db/ddlutils/trunk/src/test/resources/jdbc.properties.db2
URL:
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/test/resources/jdbc.properties.db2?rev=894556&r1=894555&r2=894556&view=diff
==============================================================================
--- db/ddlutils/trunk/src/test/resources/jdbc.properties.db2 (original)
+++ db/ddlutils/trunk/src/test/resources/jdbc.properties.db2 Wed Dec 30
07:49:27 2009
@@ -26,6 +26,6 @@
datasource.class=org.apache.commons.dbcp.BasicDataSource
datasource.driverClassName=com.ibm.db2.jcc.DB2Driver
-datasource.url=jdbc:db2://192.168.129.134:50000/ddlutils
+datasource.url=jdbc:db2://192.168.129.133:50000/ddlutils
datasource.username=ddlutils
datasource.password=ddlutils
Modified: db/ddlutils/trunk/src/test/resources/jdbc.properties.firebird
URL:
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/test/resources/jdbc.properties.firebird?rev=894556&r1=894555&r2=894556&view=diff
==============================================================================
--- db/ddlutils/trunk/src/test/resources/jdbc.properties.firebird (original)
+++ db/ddlutils/trunk/src/test/resources/jdbc.properties.firebird Wed Dec 30
07:49:27 2009
@@ -29,7 +29,7 @@
datasource.class=org.apache.commons.dbcp.BasicDataSource
datasource.driverClassName=org.firebirdsql.jdbc.FBDriver
-datasource.url=jdbc:firebirdsql://192.168.129.129/C:/Program
Files/Firebird/Firebird_2_0/data/ddlutils.fdb
+datasource.url=jdbc:firebirdsql://192.168.129.133/C:/Program
Files/Firebird/Firebird_2_0/data/ddlutils.fdb
datasource.username=SYSDBA
datasource.password=masterkey
Modified: db/ddlutils/trunk/src/test/resources/jdbc.properties.maxdb
URL:
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/test/resources/jdbc.properties.maxdb?rev=894556&r1=894555&r2=894556&view=diff
==============================================================================
--- db/ddlutils/trunk/src/test/resources/jdbc.properties.maxdb (original)
+++ db/ddlutils/trunk/src/test/resources/jdbc.properties.maxdb Wed Dec 30
07:49:27 2009
@@ -29,6 +29,6 @@
datasource.class=org.apache.commons.dbcp.BasicDataSource
datasource.driverClassName=com.sap.dbtech.jdbc.DriverSapDB
-datasource.url=jdbc:sapdb://192.168.129.134/MAXDB1
+datasource.url=jdbc:sapdb://192.168.129.133/MAXDB1
datasource.username=ddlutils
datasource.password=ddlutils
Modified: db/ddlutils/trunk/src/test/resources/jdbc.properties.oracle10
URL:
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/test/resources/jdbc.properties.oracle10?rev=894556&r1=894555&r2=894556&view=diff
==============================================================================
--- db/ddlutils/trunk/src/test/resources/jdbc.properties.oracle10 (original)
+++ db/ddlutils/trunk/src/test/resources/jdbc.properties.oracle10 Wed Dec 30
07:49:27 2009
@@ -29,7 +29,7 @@
datasource.class=org.apache.commons.dbcp.BasicDataSource
datasource.driverClassName=oracle.jdbc.driver.OracleDriver
-datasource.url=jdbc:oracle:thin:@192.168.129.134:1521:XE
+datasource.url=jdbc:oracle:thin:@192.168.129.133:1521:XE
datasource.username=ddlutils
datasource.password=ddlutils
Modified: db/ddlutils/trunk/src/test/resources/jdbc.properties.postgresql
URL:
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/test/resources/jdbc.properties.postgresql?rev=894556&r1=894555&r2=894556&view=diff
==============================================================================
--- db/ddlutils/trunk/src/test/resources/jdbc.properties.postgresql (original)
+++ db/ddlutils/trunk/src/test/resources/jdbc.properties.postgresql Wed Dec 30
07:49:27 2009
@@ -29,7 +29,7 @@
datasource.class=org.apache.commons.dbcp.BasicDataSource
datasource.driverClassName=org.postgresql.Driver
-datasource.url=jdbc:postgresql://192.168.129.134/ddlutils
+datasource.url=jdbc:postgresql://192.168.129.133/ddlutils
datasource.username=ddlutils
datasource.password=ddlutils
Modified: db/ddlutils/trunk/src/test/resources/jdbc.properties.sqlserver2005
URL:
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/test/resources/jdbc.properties.sqlserver2005?rev=894556&r1=894555&r2=894556&view=diff
==============================================================================
--- db/ddlutils/trunk/src/test/resources/jdbc.properties.sqlserver2005
(original)
+++ db/ddlutils/trunk/src/test/resources/jdbc.properties.sqlserver2005 Wed Dec
30 07:49:27 2009
@@ -26,7 +26,7 @@
datasource.class=org.apache.commons.dbcp.BasicDataSource
datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
-datasource.url=jdbc:sqlserver://192.168.129.134;databaseName=ddlutils;selectMethod=cursor
+datasource.url=jdbc:sqlserver://192.168.129.133;databaseName=ddlutils;selectMethod=cursor
datasource.username=ddlutils
datasource.password=ddlutils