diff --git a/jOOQ-test/src/org/jooq/test/_/testcases/FunctionTests.java b/jOOQ-test/src/org/jooq/test/_/testcases/FunctionTests.java index 0dbad7f7cc..11cbcab5db 100644 --- a/jOOQ-test/src/org/jooq/test/_/testcases/FunctionTests.java +++ b/jOOQ-test/src/org/jooq/test/_/testcases/FunctionTests.java @@ -528,7 +528,6 @@ extends BaseTest repeat(String field, int count) { return repeat(val(field, String.class), val(count)); } @@ -2779,7 +2779,7 @@ public class Factory implements FactoryOperations { * * @see #repeat(Field, Field) */ - @Support({ ASE, CUBRID, DB2, H2, HSQLDB, INGRES, MYSQL, ORACLE, POSTGRES, SQLSERVER, SYBASE }) + @Support({ ASE, CUBRID, DB2, H2, HSQLDB, INGRES, MYSQL, ORACLE, POSTGRES, SQLITE, SQLSERVER, SYBASE }) public static Field repeat(String field, Field count) { return repeat(val(field, String.class), nullSafe(count)); } @@ -2789,7 +2789,7 @@ public class Factory implements FactoryOperations { * * @see #repeat(Field, Field) */ - @Support({ ASE, CUBRID, DB2, H2, HSQLDB, INGRES, MYSQL, ORACLE, POSTGRES, SQLSERVER, SYBASE }) + @Support({ ASE, CUBRID, DB2, H2, HSQLDB, INGRES, MYSQL, ORACLE, POSTGRES, SQLITE, SQLSERVER, SYBASE }) public static Field repeat(Field field, int count) { return repeat(nullSafe(field), val(count)); } @@ -2803,8 +2803,11 @@ public class Factory implements FactoryOperations { * using rpad and length, which may be simulated as well, depending on the * RDBMS: *
rpad([field], length([field]) * [count], [field])
+ *

+ * In {@link SQLDialect#SQLITE}, this is simulated as such: + *

replace(substr(quote(zeroblob(([count] + 1) / 2)), 3, [count]), '0', [field])
*/ - @Support({ ASE, CUBRID, DB2, H2, HSQLDB, INGRES, MYSQL, ORACLE, POSTGRES, SQLSERVER, SYBASE }) + @Support({ ASE, CUBRID, DB2, H2, HSQLDB, INGRES, MYSQL, ORACLE, POSTGRES, SQLITE, SQLSERVER, SYBASE }) public static Field repeat(Field field, Field count) { return new Repeat(nullSafe(field), nullSafe(count)); } diff --git a/jOOQ/src/main/java/org/jooq/impl/Repeat.java b/jOOQ/src/main/java/org/jooq/impl/Repeat.java index f1c5a1347d..a2c8e590dd 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Repeat.java +++ b/jOOQ/src/main/java/org/jooq/impl/Repeat.java @@ -67,6 +67,13 @@ class Repeat extends AbstractFunction { case ORACLE: return Factory.rpad(string, Factory.length(string).mul(count), string); + // Simulation of REPEAT() for SQLite currently cannot be achieved + // using RPAD() above, as RPAD() expects characters, not strings + // Another option is documented here, though: + // http://stackoverflow.com/questions/11568496/how-to-simulate-repeat-in-sqlite + case SQLITE: + return Factory.field("replace(substr(quote(zeroblob(({0} + 1) / 2)), 3, {1}), '0', {2})", String.class, count, count, string); + case ASE: case SQLSERVER: return function("replicate", SQLDataType.VARCHAR, string, count);