Modified:
branches/branch_3_1/connector-j/src/com/mysql/jdbc/ConnectionProperties.java
branches/branch_5_0/connector-j/src/com/mysql/jdbc/ConnectionProperties.java
trunk/connector-j/src/com/mysql/jdbc/ConnectionProperties.java
Log:
Fixed issue where exposeAsXML() was letting ordered elements clobber each other if they shared a key (they now are listed in alpha order at the given key).
Modified: branches/branch_3_1/connector-j/src/com/mysql/jdbc/ConnectionProperties.java
===================================================================
--- branches/branch_3_1/connector-j/src/com/mysql/jdbc/ConnectionProperties.java 2007-03-26 16:09:00 UTC (rev 6370)
+++ branches/branch_3_1/connector-j/src/com/mysql/jdbc/ConnectionProperties.java 2007-03-27 14:50:30 UTC (rev 6371)
@@ -596,7 +596,7 @@
private BooleanConnectionProperty allowMultiQueries = new BooleanConnectionProperty(
"allowMultiQueries",
false,
- "Allow the use of ';' to delimit multiple queries during one statement (true/false, defaults to 'false'",
+ "Allow the use of ';' to delimit multiple queries during one statement (true/false), defaults to 'false'",
"3.1.1", SECURITY_CATEGORY, 1);
private BooleanConnectionProperty allowNanAndInf = new BooleanConnectionProperty(
@@ -1451,9 +1451,16 @@
Map[] connectionSortMaps = (Map[]) propertyListByCategory
.get(CONNECTION_AND_AUTH_CATEGORY);
- connectionSortMaps[0].put(new Integer(userProp.getOrder()), userProp);
- connectionSortMaps[0].put(new Integer(passwordProp.getOrder()),
- passwordProp);
+ TreeMap userMap = new TreeMap();
+ userMap.put(userProp.getPropertyName(), userProp);
+
+ connectionSortMaps[0].put(new Integer(userProp.getOrder()), userMap);
+
+ TreeMap passwordMap = new TreeMap();
+ passwordMap.put(passwordProp.getPropertyName(), passwordProp);
+
+ connectionSortMaps[0]
+ .put(new Integer(passwordProp.getOrder()), passwordMap);
try {
for (int i = 0; i < numPropertiesToSet; i++) {
@@ -1468,7 +1475,16 @@
if (orderInCategory == Integer.MIN_VALUE) {
sortMaps[1].put(propToGet.getPropertyName(), propToGet);
} else {
- sortMaps[0].put(new Integer(orderInCategory), propToGet);
+ Integer order = new Integer(orderInCategory);
+
+ Map orderMap = (Map)sortMaps[0].get(order);
+
+ if (orderMap == null) {
+ orderMap = new TreeMap();
+ sortMaps[0].put(order, orderMap);
+ }
+
+ orderMap.put(propToGet.getPropertyName(), propToGet);
}
}
@@ -1483,36 +1499,38 @@
xmlBuf.append("\">");
while (orderedIter.hasNext()) {
- ConnectionProperty propToGet = (ConnectionProperty) orderedIter
- .next();
- propToGet.syncDriverPropertyInfo();
-
- xmlBuf.append("\n <Property name=\"");
- xmlBuf.append(propToGet.getPropertyName());
- xmlBuf.append("\" required=\"");
- xmlBuf.append(propToGet.required ? "Yes" : "No");
-
- xmlBuf.append("\" default=\"");
-
- if (propToGet.getDefaultValue() != null) {
- xmlBuf.append(propToGet.getDefaultValue());
+ Iterator orderedAlphaIter = ((Map)orderedIter.next()).values().iterator();
+
+ while (orderedAlphaIter.hasNext()) {
+ ConnectionProperty propToGet = (ConnectionProperty) orderedAlphaIter
+ .next();
+
+ xmlBuf.append("\n <Property name=\"");
+ xmlBuf.append(propToGet.getPropertyName());
+ xmlBuf.append("\" required=\"");
+ xmlBuf.append(propToGet.required ? "Yes" : "No");
+
+ xmlBuf.append("\" default=\"");
+
+ if (propToGet.getDefaultValue() != null) {
+ xmlBuf.append(propToGet.getDefaultValue());
+ }
+
+ xmlBuf.append("\" sortOrder=\"");
+ xmlBuf.append(propToGet.getOrder());
+ xmlBuf.append("\" since=\"");
+ xmlBuf.append(propToGet.sinceVersion);
+ xmlBuf.append("\">\n");
+ xmlBuf.append(" ");
+ xmlBuf.append(propToGet.description);
+ xmlBuf.append("\n </Property>");
}
-
- xmlBuf.append("\" sortOrder=\"");
- xmlBuf.append(propToGet.getOrder());
- xmlBuf.append("\" since=\"");
- xmlBuf.append(propToGet.sinceVersion);
- xmlBuf.append("\">\n");
- xmlBuf.append(" ");
- xmlBuf.append(propToGet.description);
- xmlBuf.append("\n </Property>");
}
while (alphaIter.hasNext()) {
ConnectionProperty propToGet = (ConnectionProperty) alphaIter
.next();
- propToGet.syncDriverPropertyInfo();
-
+
xmlBuf.append("\n <Property name=\"");
xmlBuf.append(propToGet.getPropertyName());
xmlBuf.append("\" required=\"");
Modified: branches/branch_5_0/connector-j/src/com/mysql/jdbc/ConnectionProperties.java
===================================================================
--- branches/branch_5_0/connector-j/src/com/mysql/jdbc/ConnectionProperties.java 2007-03-26 16:09:00 UTC (rev 6370)
+++ branches/branch_5_0/connector-j/src/com/mysql/jdbc/ConnectionProperties.java 2007-03-27 14:50:30 UTC (rev 6371)
@@ -617,7 +617,7 @@
private BooleanConnectionProperty allowMultiQueries = new BooleanConnectionProperty(
"allowMultiQueries",
false,
- "Allow the use of ';' to delimit multiple queries during one statement (true/false, defaults to 'false'",
+ "Allow the use of ';' to delimit multiple queries during one statement (true/false), defaults to 'false'",
"3.1.1", SECURITY_CATEGORY, 1);
private BooleanConnectionProperty allowNanAndInf = new BooleanConnectionProperty(
@@ -1174,10 +1174,9 @@
"rewriteBatchedStatements",
false,
"Should the driver use multiqueries (irregardless of the setting of \"allowMultiQueries\") as well as "
- + "rewriting of prepared statements for INSERT into multi-value inserts when executeBatch() is called? Notice that this has the potential "
+ + "rewriting of prepared statements for INSERT and REPLACE into multi-value inserts/replaces when executeBatch() is called? Notice that this has the potential "
+ "for SQL injection if using plain java.sql.Statements and your code doesn't sanitize input correctly.\n\n"
- + "Notice that for prepared statements, server-side prepared statements can not currently take advantage of "
- + "this rewrite option, and that if you don't specify stream lengths when using PreparedStatement.set*Stream(),"
+ + "Notice that if you don't specify stream lengths when using PreparedStatement.set*Stream(),"
+ "the driver won't be able to determine the optimium number of parameters per batch and you might receive "
+ "an error from the driver that the resultant packet is too large.\n\n"
+ "Statement.getGeneratedKeys() for these rewritten statements only works when the entire "
@@ -1574,9 +1573,16 @@
Map[] connectionSortMaps = (Map[]) propertyListByCategory
.get(CONNECTION_AND_AUTH_CATEGORY);
- connectionSortMaps[0].put(new Integer(userProp.getOrder()), userProp);
- connectionSortMaps[0].put(new Integer(passwordProp.getOrder()),
- passwordProp);
+ TreeMap userMap = new TreeMap();
+ userMap.put(userProp.getPropertyName(), userProp);
+
+ connectionSortMaps[0].put(new Integer(userProp.getOrder()), userMap);
+
+ TreeMap passwordMap = new TreeMap();
+ passwordMap.put(passwordProp.getPropertyName(), passwordProp);
+
+ connectionSortMaps[0]
+ .put(new Integer(passwordProp.getOrder()), passwordMap);
try {
for (int i = 0; i < numPropertiesToSet; i++) {
@@ -1591,7 +1597,16 @@
if (orderInCategory == Integer.MIN_VALUE) {
sortMaps[1].put(propToGet.getPropertyName(), propToGet);
} else {
- sortMaps[0].put(new Integer(orderInCategory), propToGet);
+ Integer order = new Integer(orderInCategory);
+
+ Map orderMap = (Map)sortMaps[0].get(order);
+
+ if (orderMap == null) {
+ orderMap = new TreeMap();
+ sortMaps[0].put(order, orderMap);
+ }
+
+ orderMap.put(propToGet.getPropertyName(), propToGet);
}
}
@@ -1606,28 +1621,32 @@
xmlBuf.append("\">");
while (orderedIter.hasNext()) {
- ConnectionProperty propToGet = (ConnectionProperty) orderedIter
- .next();
+ Iterator orderedAlphaIter = ((Map)orderedIter.next()).values().iterator();
- xmlBuf.append("\n <Property name=\"");
- xmlBuf.append(propToGet.getPropertyName());
- xmlBuf.append("\" required=\"");
- xmlBuf.append(propToGet.required ? "Yes" : "No");
-
- xmlBuf.append("\" default=\"");
-
- if (propToGet.getDefaultValue() != null) {
- xmlBuf.append(propToGet.getDefaultValue());
+ while (orderedAlphaIter.hasNext()) {
+ ConnectionProperty propToGet = (ConnectionProperty) orderedAlphaIter
+ .next();
+
+ xmlBuf.append("\n <Property name=\"");
+ xmlBuf.append(propToGet.getPropertyName());
+ xmlBuf.append("\" required=\"");
+ xmlBuf.append(propToGet.required ? "Yes" : "No");
+
+ xmlBuf.append("\" default=\"");
+
+ if (propToGet.getDefaultValue() != null) {
+ xmlBuf.append(propToGet.getDefaultValue());
+ }
+
+ xmlBuf.append("\" sortOrder=\"");
+ xmlBuf.append(propToGet.getOrder());
+ xmlBuf.append("\" since=\"");
+ xmlBuf.append(propToGet.sinceVersion);
+ xmlBuf.append("\">\n");
+ xmlBuf.append(" ");
+ xmlBuf.append(propToGet.description);
+ xmlBuf.append("\n </Property>");
}
-
- xmlBuf.append("\" sortOrder=\"");
- xmlBuf.append(propToGet.getOrder());
- xmlBuf.append("\" since=\"");
- xmlBuf.append(propToGet.sinceVersion);
- xmlBuf.append("\">\n");
- xmlBuf.append(" ");
- xmlBuf.append(propToGet.description);
- xmlBuf.append("\n </Property>");
}
while (alphaIter.hasNext()) {
Modified: trunk/connector-j/src/com/mysql/jdbc/ConnectionProperties.java
===================================================================
--- trunk/connector-j/src/com/mysql/jdbc/ConnectionProperties.java 2007-03-26 16:09:00 UTC (rev 6370)
+++ trunk/connector-j/src/com/mysql/jdbc/ConnectionProperties.java 2007-03-27 14:50:30 UTC (rev 6371)
@@ -620,7 +620,7 @@
private BooleanConnectionProperty allowMultiQueries = new BooleanConnectionProperty(
"allowMultiQueries",
false,
- "Allow the use of ';' to delimit multiple queries during one statement (true/false, defaults to 'false'",
+ "Allow the use of ';' to delimit multiple queries during one statement (true/false), defaults to 'false'",
"3.1.1", SECURITY_CATEGORY, 1);
private BooleanConnectionProperty allowNanAndInf = new BooleanConnectionProperty(
@@ -1622,9 +1622,16 @@
Map[] connectionSortMaps = (Map[]) propertyListByCategory
.get(CONNECTION_AND_AUTH_CATEGORY);
- connectionSortMaps[0].put(Integer.valueOf(userProp.getOrder()), userProp);
- connectionSortMaps[0].put(Integer.valueOf(passwordProp.getOrder()),
- passwordProp);
+ TreeMap userMap = new TreeMap();
+ userMap.put(userProp.getPropertyName(), userProp);
+
+ connectionSortMaps[0].put(new Integer(userProp.getOrder()), userMap);
+
+ TreeMap passwordMap = new TreeMap();
+ passwordMap.put(passwordProp.getPropertyName(), passwordProp);
+
+ connectionSortMaps[0]
+ .put(new Integer(passwordProp.getOrder()), passwordMap);
try {
for (int i = 0; i < numPropertiesToSet; i++) {
@@ -1639,7 +1646,16 @@
if (orderInCategory == Integer.MIN_VALUE) {
sortMaps[1].put(propToGet.getPropertyName(), propToGet);
} else {
- sortMaps[0].put(Integer.valueOf(orderInCategory), propToGet);
+ Integer order = new Integer(orderInCategory);
+
+ Map orderMap = (Map)sortMaps[0].get(order);
+
+ if (orderMap == null) {
+ orderMap = new TreeMap();
+ sortMaps[0].put(order, orderMap);
+ }
+
+ orderMap.put(propToGet.getPropertyName(), propToGet);
}
}
@@ -1654,28 +1670,32 @@
xmlBuf.append("\">");
while (orderedIter.hasNext()) {
- ConnectionProperty propToGet = (ConnectionProperty) orderedIter
- .next();
+ Iterator orderedAlphaIter = ((Map)orderedIter.next()).values().iterator();
- xmlBuf.append("\n <Property name=\"");
- xmlBuf.append(propToGet.getPropertyName());
- xmlBuf.append("\" required=\"");
- xmlBuf.append(propToGet.required ? "Yes" : "No");
-
- xmlBuf.append("\" default=\"");
-
- if (propToGet.getDefaultValue() != null) {
- xmlBuf.append(propToGet.getDefaultValue());
+ while (orderedAlphaIter.hasNext()) {
+ ConnectionProperty propToGet = (ConnectionProperty) orderedAlphaIter
+ .next();
+
+ xmlBuf.append("\n <Property name=\"");
+ xmlBuf.append(propToGet.getPropertyName());
+ xmlBuf.append("\" required=\"");
+ xmlBuf.append(propToGet.required ? "Yes" : "No");
+
+ xmlBuf.append("\" default=\"");
+
+ if (propToGet.getDefaultValue() != null) {
+ xmlBuf.append(propToGet.getDefaultValue());
+ }
+
+ xmlBuf.append("\" sortOrder=\"");
+ xmlBuf.append(propToGet.getOrder());
+ xmlBuf.append("\" since=\"");
+ xmlBuf.append(propToGet.sinceVersion);
+ xmlBuf.append("\">\n");
+ xmlBuf.append(" ");
+ xmlBuf.append(propToGet.description);
+ xmlBuf.append("\n </Property>");
}
-
- xmlBuf.append("\" sortOrder=\"");
- xmlBuf.append(propToGet.getOrder());
- xmlBuf.append("\" since=\"");
- xmlBuf.append(propToGet.sinceVersion);
- xmlBuf.append("\">\n");
- xmlBuf.append(" ");
- xmlBuf.append(propToGet.description);
- xmlBuf.append("\n </Property>");
}
while (alphaIter.hasNext()) {
| Thread |
|---|
| • Connector/J commit: r6371 - branches/branch_3_1/connector-j/src/com/mysql/jdbc branches/branch_5_0/connector-j/src/com/mysql/jdbc trunk/connector-j/sr... | mmatthews | 27 Mar |