Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add sql char length functions #4134

Merged
merged 2 commits into from
May 5, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ class HsqlTypeResolver(private val parentResolver: TypeResolver) : TypeResolver
"coalesce", "ifnull" -> encapsulatingType(exprList, TINY_INT, SMALL_INT, HsqlType.INTEGER, INTEGER, BIG_INT, REAL, TEXT, BLOB)
"max" -> encapsulatingType(exprList, TINY_INT, SMALL_INT, HsqlType.INTEGER, INTEGER, BIG_INT, REAL, TEXT, BLOB).asNullable()
"min" -> encapsulatingType(exprList, BLOB, TEXT, TINY_INT, SMALL_INT, INTEGER, HsqlType.INTEGER, BIG_INT, REAL).asNullable()
"length", "char_length", "character_length" -> IntermediateType(BIG_INT).nullableIf(resolvedType(exprList[0]).javaType.isNullable)
else -> null
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ class MySqlTypeResolver(
"to_seconds" -> IntermediateType(INTEGER)
"json_arrayagg" -> IntermediateType(TEXT)
"date_add", "date_sub" -> IntermediateType(TEXT)
"char_length", "character_length" -> IntermediateType(INTEGER).nullableIf(resolvedType(exprList[0]).javaType.isNullable)
else -> null
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
CREATE TABLE t1 (
c1 int(11)
c1 int(11),
t1 TEXT,
t2 VARCHAR(255),
t3 CHAR(10)
);

ALTER TABLE t1
ADD CONSTRAINT chk_c1 CHECK (c1 > 0);
ADD CONSTRAINT chk_c1 CHECK (c1 > 0),
ADD CONSTRAINT chk_t1 CHECK (LENGTH(t1) > 0),
ADD CONSTRAINT chk_t2 CHECK (CHAR_LENGTH(t2) > 0),
ADD CONSTRAINT chk_t3 CHECK (CHARACTER_LENGTH(t3) > 0);
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
CREATE TABLE characters (
name VARCHAR(255) NOT NULL,
description VARCHAR(255)
);

insertCharacter:
INSERT INTO characters (name, description) VALUES (:name, :description);

selectNameCharLength:
SELECT char_length(name) FROM characters;

selectDescriptionCharLength:
SELECT char_length(description) FROM characters;
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import java.sql.Connection
import java.sql.DriverManager

class HsqlTest {
val conn = DriverManager.getConnection("jdbc:hsqldb:mem:mymemdb")
val conn = DriverManager.getConnection("jdbc:hsqldb:mem:mymemdb;shutdown=true")
val driver = object : JdbcDriver() {
override fun getConnection() = conn
override fun closeConnection(connection: Connection) = Unit
Expand Down Expand Up @@ -41,4 +41,12 @@ class HsqlTest {
),
)
}

@Test fun charLengthFunctionReturnsCharacterCount() {
database.charactersQueries.insertCharacter("abcdef", null)
val length = database.charactersQueries.selectNameCharLength().executeAsOne()
assertThat(length).isEqualTo(6)
val nullLength = database.charactersQueries.selectDescriptionCharLength().executeAsOne()
assertThat(nullLength.char_length).isNull()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
CREATE TABLE characters(
name VARCHAR(255) CHARACTER SET utf8mb4 NOT NULL,
description TEXT CHARACTER SET utf8mb4
);

insertCharacter:
INSERT INTO characters (name, description) VALUES (:name, :description);

selectNameLength:
SELECT length(name) FROM characters;

selectDescriptionLength:
SELECT length(description) FROM characters;

selectNameCharLength:
SELECT char_length(name) FROM characters;

selectDescriptionCharLength:
SELECT char_length(description) FROM characters;
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ class MySqlTest {
lateinit var connection: Connection
lateinit var dogQueries: DogQueries
lateinit var datesQueries: DatesQueries
lateinit var charactersQueries: CharactersQueries
lateinit var driver: JdbcDriver

@Before
Expand All @@ -39,6 +40,7 @@ class MySqlTest {
MyDatabase.Schema.create(driver)
dogQueries = database.dogQueries
datesQueries = database.datesQueries
charactersQueries = database.charactersQueries
}

@After
Expand Down Expand Up @@ -123,6 +125,22 @@ class MySqlTest {
}
}

@Test fun lengthFunctionReturnsByteCount() {
charactersQueries.insertCharacter("海豚", null)
val length = charactersQueries.selectNameLength().executeAsOne()
assertThat(length).isEqualTo(6)
val nullLength = charactersQueries.selectDescriptionLength().executeAsOne()
assertThat(nullLength.length).isNull()
}

@Test fun charLengthFunctionReturnsCharacterCount() {
charactersQueries.insertCharacter("海豚", null)
val length = charactersQueries.selectNameCharLength().executeAsOne()
assertThat(length).isEqualTo(2)
val nullLength = charactersQueries.selectDescriptionCharLength().executeAsOne()
assertThat(nullLength.char_length).isNull()
}

private class ExpectedException : Exception()
private class SqlDriverTransacter(driver: SqlDriver) : TransacterImpl(driver)
}