%PDF-1.5 %���� ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY
| Server IP : 122.154.253.140 / Your IP : 216.73.216.49 Web Server : Microsoft-IIS/7.5 System : Windows NT SERVER02 6.1 build 7601 (Windows Server 2008 R2 Standard Edition Service Pack 1) i586 User : IUSR ( 0) PHP Version : 5.6.31 Disable Function : NONE MySQL : ON | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : C:/Program Files (x86)/MySQL/Connector.J 5.1/src/testsuite/simple/ |
Upload File : |
/*
Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
The MySQL Connector/J is licensed under the terms of the GPLv2
<http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>, like most MySQL Connectors.
There are special exceptions to the terms and conditions of the GPLv2 as it is applied to
this software, see the FOSS License Exception
<http://www.mysql.com/about/legal/licensing/foss-exception.html>.
This program is free software; you can redistribute it and/or modify it under the terms
of the GNU General Public License as published by the Free Software Foundation; version 2
of the License.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this
program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth
Floor, Boston, MA 02110-1301 USA
*/
package testsuite.simple;
import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import testsuite.BaseTestCase;
import com.mysql.jdbc.CharsetMapping;
import com.mysql.jdbc.ConnectionImpl;
public class ResultSetTest extends BaseTestCase {
public ResultSetTest(String name) {
super(name);
}
/**
* Runs all test cases in this test suite
*
* @param args
*/
public static void main(String[] args) {
junit.textui.TestRunner.run(ResultSetTest.class);
}
public void testPadding() throws Exception {
if (!versionMeetsMinimum(4, 1, 0)) {
return;
}
Connection paddedConn = null;
int numChars = 32;
// build map of charsets supported by server
Connection c = getConnectionWithProps("detectCustomCollations=true");
Map<String, Integer> charsetsMap = new HashMap<String, Integer>();
Iterator<Integer> collationIndexes = ((ConnectionImpl) c).indexToMysqlCharset.keySet().iterator();
while (collationIndexes.hasNext()) {
Integer index = collationIndexes.next();
String charsetName = null;
if (((ConnectionImpl) c).indexToCustomMysqlCharset != null) {
charsetName = ((ConnectionImpl) c).indexToCustomMysqlCharset.get(index);
}
if (charsetName == null) {
charsetName = CharsetMapping.getMysqlCharsetNameForCollationIndex(index);
}
if (charsetName != null) {
charsetsMap.put(charsetName, index);
}
}
c.close();
Iterator<String> charsetNames = charsetsMap.keySet().iterator();
StringBuilder columns = new StringBuilder();
StringBuilder emptyBuf = new StringBuilder();
StringBuilder abcBuf = new StringBuilder();
StringBuilder repeatBuf = new StringBuilder();
StringBuilder selectBuf = new StringBuilder();
int counter = 0;
while (charsetNames.hasNext()) {
String charsetName = charsetNames.next();
if (charsetName.equalsIgnoreCase("LATIN7") || charsetName.equalsIgnoreCase("BINARY")) {
continue; // no mapping in Java
}
try {
"".getBytes(charsetName);
} catch (UnsupportedEncodingException uee) {
continue; // not supported on this platform
}
if (counter != 0) {
columns.append(",");
emptyBuf.append(",");
abcBuf.append(",");
repeatBuf.append(",");
selectBuf.append(",");
}
emptyBuf.append("''");
abcBuf.append("'abc'");
repeatBuf.append("REPEAT('b', " + numChars + ")");
columns.append("field_");
columns.append(charsetName);
columns.append(" CHAR(");
columns.append(numChars);
columns.append(") CHARACTER SET ");
columns.append(charsetName);
selectBuf.append("field_");
selectBuf.append(charsetName);
counter++;
}
createTable("testPadding", "(" + columns.toString() + ", ord INT)");
this.stmt.executeUpdate("INSERT INTO testPadding VALUES (" + emptyBuf.toString() + ", 1), (" + abcBuf.toString() + ", 2), (" + repeatBuf.toString()
+ ", 3)");
try {
Properties props = new Properties();
props.setProperty("padCharsWithSpace", "true");
paddedConn = getConnectionWithProps(props);
testPaddingForConnection(paddedConn, numChars, selectBuf);
props.setProperty("useDynamicCharsetInfo", "true");
paddedConn = getConnectionWithProps(props);
testPaddingForConnection(paddedConn, numChars, selectBuf);
} finally {
if (paddedConn != null) {
paddedConn.close();
}
}
}
private void testPaddingForConnection(Connection paddedConn, int numChars, StringBuilder selectBuf) throws SQLException {
String query = "SELECT " + selectBuf.toString() + " FROM testPadding ORDER by ord";
this.rs = paddedConn.createStatement().executeQuery(query);
int numCols = this.rs.getMetaData().getColumnCount();
while (this.rs.next()) {
for (int i = 0; i < numCols; i++) {
assertEquals(
"For column '" + this.rs.getMetaData().getColumnName(i + 1) + "' of collation "
+ ((com.mysql.jdbc.ResultSetMetaData) this.rs.getMetaData()).getColumnCharacterSet(i + 1), numChars, this.rs.getString(i + 1)
.length());
}
}
this.rs = ((com.mysql.jdbc.Connection) paddedConn).clientPrepareStatement(query).executeQuery();
while (this.rs.next()) {
for (int i = 0; i < numCols; i++) {
assertEquals(
"For column '" + this.rs.getMetaData().getColumnName(i + 1) + "' of collation "
+ ((com.mysql.jdbc.ResultSetMetaData) this.rs.getMetaData()).getColumnCharacterSet(i + 1), numChars, this.rs.getString(i + 1)
.length());
}
}
if (versionMeetsMinimum(4, 1)) {
this.rs = ((com.mysql.jdbc.Connection) paddedConn).serverPrepareStatement(query).executeQuery();
while (this.rs.next()) {
for (int i = 0; i < numCols; i++) {
assertEquals(
"For column '" + this.rs.getMetaData().getColumnName(i + 1) + "' of collation "
+ ((com.mysql.jdbc.ResultSetMetaData) this.rs.getMetaData()).getColumnCharacterSet(i + 1), numChars,
this.rs.getString(i + 1).length());
}
}
}
this.rs = this.stmt.executeQuery(query);
while (this.rs.next()) {
for (int i = 0; i < numCols; i++) {
if (this.rs.getRow() != 3) {
assertTrue(
"For column '" + this.rs.getMetaData().getColumnName(i + 1) + "' of collation "
+ ((com.mysql.jdbc.ResultSetMetaData) this.rs.getMetaData()).getColumnCharacterSet(i + 1),
numChars != this.rs.getString(i + 1).length());
} else {
assertEquals(
"For column '" + this.rs.getMetaData().getColumnName(i + 1) + "' of collation "
+ ((com.mysql.jdbc.ResultSetMetaData) this.rs.getMetaData()).getColumnCharacterSet(i + 1), numChars,
this.rs.getString(i + 1).length());
}
}
}
this.rs = ((com.mysql.jdbc.Connection) this.conn).clientPrepareStatement(query).executeQuery();
while (this.rs.next()) {
for (int i = 0; i < numCols; i++) {
if (this.rs.getRow() != 3) {
assertTrue(
"For column '" + this.rs.getMetaData().getColumnName(i + 1) + "' of collation "
+ ((com.mysql.jdbc.ResultSetMetaData) this.rs.getMetaData()).getColumnCharacterSet(i + 1),
numChars != this.rs.getString(i + 1).length());
} else {
assertEquals(
"For column '" + this.rs.getMetaData().getColumnName(i + 1) + "' of collation "
+ ((com.mysql.jdbc.ResultSetMetaData) this.rs.getMetaData()).getColumnCharacterSet(i + 1), numChars,
this.rs.getString(i + 1).length());
}
}
}
if (versionMeetsMinimum(4, 1)) {
this.rs = ((com.mysql.jdbc.Connection) this.conn).serverPrepareStatement(query).executeQuery();
while (this.rs.next()) {
for (int i = 0; i < numCols; i++) {
if (this.rs.getRow() != 3) {
assertTrue("For column '" + this.rs.getMetaData().getColumnName(i + 1) + "' of collation "
+ ((com.mysql.jdbc.ResultSetMetaData) this.rs.getMetaData()).getColumnCharacterSet(i + 1), numChars != this.rs.getString(i + 1)
.length());
} else {
assertEquals("For column '" + this.rs.getMetaData().getColumnName(i + 1) + "' of collation "
+ ((com.mysql.jdbc.ResultSetMetaData) this.rs.getMetaData()).getColumnCharacterSet(i + 1), numChars, this.rs.getString(i + 1)
.length());
}
}
}
}
}
}