Skip to content

Commit

Permalink
CONJ-412: tinyInt1isBit is not applied in method columnTypeClause
Browse files Browse the repository at this point in the history
  • Loading branch information
mikecelis committed Jan 18, 2017
1 parent f5dc9ea commit 757eb2d
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 7 deletions.
4 changes: 2 additions & 2 deletions mariadb-java-client.iml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" version="4">
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="false">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
Expand All @@ -20,7 +20,7 @@
<orderEntry type="library" scope="TEST" name="Maven: org.threadly:threadly:4.4.3" level="project" />
<orderEntry type="library" name="Maven: net.java.dev.jna:jna:4.2.1" level="project" />
<orderEntry type="library" name="Maven: net.java.dev.jna:jna-platform:4.2.1" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.21" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.22" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: ch.qos.logback:logback-classic:1.1.7" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: ch.qos.logback:logback-core:1.1.7" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: commons-dbcp:commons-dbcp:1.4" level="project" />
Expand Down
14 changes: 9 additions & 5 deletions src/main/java/org/mariadb/jdbc/MariaDbDatabaseMetaData.java
Original file line number Diff line number Diff line change
Expand Up @@ -86,12 +86,16 @@ public MariaDbDatabaseMetaData(Connection connection, String user, String url) {
}

/* Remove length from column type spec,convert to uppercase, e.g bigint(10) unsigned becomes BIGINT UNSIGNED */
static String columnTypeClause(String columnName) {
String columnTypeClause(String columnName) {
String parsedColumnName = parseColumnName(columnName);
return " UCASE(IF( " + parsedColumnName + " LIKE '%(%)%', CONCAT(SUBSTRING( " + parsedColumnName + ",1, LOCATE('(',"
+ parsedColumnName + ") - 1 ), SUBSTRING(" + parsedColumnName + ",1+locate(')'," + parsedColumnName + "))), "
+ parsedColumnName + "))";
}

return
" UCASE(IF( " + columnName + " LIKE '%(%)%', CONCAT(SUBSTRING( " + columnName + ",1, LOCATE('(',"
+ columnName + ") - 1 ), SUBSTRING(" + columnName + ",1+locate(')'," + columnName + "))), "
+ columnName + "))";
private String parseColumnName(String columnName) {
return (((connection.getProtocol().getDataTypeMappingFlags() & MariaSelectResultSet.TINYINT1_IS_BIT) == 0)
? columnName : "IF(" + columnName + "='tinyint(1)','BIT'," + columnName + ") ");
}

/**
Expand Down
41 changes: 41 additions & 0 deletions src/test/java/org/mariadb/jdbc/MariaDbDatabaseMetaDataTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package org.mariadb.jdbc;

import com.fasterxml.jackson.databind.deser.Deserializers;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.sql.*;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.Executor;

import static org.junit.Assert.*;



public class MariaDbDatabaseMetaDataTest extends BaseTest {


@Test
public void testColumnTypeClauseTinyInt1IsBitTrue() throws Exception {
MariaDbConnection connection = (MariaDbConnection)setConnection();
MariaDbDatabaseMetaData dbMetaData = new MariaDbDatabaseMetaData(connection, "", "");
String result = dbMetaData.columnTypeClause("column_name");
assertEquals(" UCASE(IF( IF(column_name='tinyint(1)','BIT',column_name) LIKE '%(%)%', CONCAT(SUBSTRING( "
+ "IF(column_name='tinyint(1)','BIT',column_name) ,1, LOCATE('(',IF(column_name='tinyint(1)','BIT',column_name) ) - 1 ), "
+ "SUBSTRING(IF(column_name='tinyint(1)','BIT',column_name) ,1+locate(')',IF(column_name='tinyint(1)','BIT',column_name) ))), "
+ "IF(column_name='tinyint(1)','BIT',column_name) ))", result);
}

@Test
public void testColumnTypeClauseTinyInt1IsBitFalse() throws Exception {
Properties props = new Properties();
props.setProperty("tinyInt1isBit", "false");
MariaDbConnection connection = (MariaDbConnection)openNewConnection(connUri, props);
MariaDbDatabaseMetaData dbMetaData = new MariaDbDatabaseMetaData(connection, "", "");
String result = dbMetaData.columnTypeClause("column_name");
assertEquals(" UCASE(IF( column_name LIKE '%(%)%', CONCAT(SUBSTRING( column_name,1, LOCATE('(',column_name) - 1 ), "
+ "SUBSTRING(column_name,1+locate(')',column_name))), column_name))", result);
}

}

0 comments on commit 757eb2d

Please sign in to comment.