From b60b575069619507015f390c8c86b2f1345f2bd5 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Sun, 22 Jul 2012 13:01:42 +0200 Subject: [PATCH] [#727] Simulate RPAD and LPAD in SQLite - Some improvements to support padding by more than one character --- jOOQ/src/main/java/org/jooq/impl/Lpad.java | 15 +++++++++++++-- jOOQ/src/main/java/org/jooq/impl/Rpad.java | 15 +++++++++++++-- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/Lpad.java b/jOOQ/src/main/java/org/jooq/impl/Lpad.java index d24921c353..822bd94a12 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Lpad.java +++ b/jOOQ/src/main/java/org/jooq/impl/Lpad.java @@ -79,9 +79,20 @@ class Lpad extends AbstractFunction { // This beautiful expression was contributed by "Ludo", here: // http://stackoverflow.com/questions/6576343/how-to-simulate-lpad-rpad-with-sqlite case SQLITE: { - return Factory.field("replace(replace(substr(quote(zeroblob(({0} + 1) / 2)), 3, ({1} - length({2}))), '''', ''), '0', {3}) || {4}", + return Factory.field( + "substr(" + + "replace(" + + "replace(" + + "substr(" + + "quote(" + + "zeroblob((({0} - length({1}) - 1 + length({2})) / length({3}) + 1) / 2)" + + "), 3" + + "), '''', ''" + + "), '0', {4}" + + "), 1, ({5} - length({6}))" + + ") || {7}", String.class, - length, length, field, character, field); + length, field, character, character, character, length, field, field); } default: { diff --git a/jOOQ/src/main/java/org/jooq/impl/Rpad.java b/jOOQ/src/main/java/org/jooq/impl/Rpad.java index 2b97e1afdd..80a4c6d3d9 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Rpad.java +++ b/jOOQ/src/main/java/org/jooq/impl/Rpad.java @@ -79,9 +79,20 @@ class Rpad extends AbstractFunction { // This beautiful expression was contributed by "Ludo", here: // http://stackoverflow.com/questions/6576343/how-to-simulate-lpad-rpad-with-sqlite case SQLITE: { - return Factory.field("{0} || replace(replace(substr(quote(zeroblob(({1} + 1) / 2)), 3, ({2} - length({3}))), '''', ''), '0', {4})", + return Factory.field( + "{0} || substr(" + + "replace(" + + "replace(" + + "substr(" + + "quote(" + + "zeroblob((({1} - length({2}) - 1 + length({3})) / length({4}) + 1) / 2)" + + "), 3" + + "), '''', ''" + + "), '0', {5}" + + "), 1, ({6} - length({7}))" + + ")", String.class, - field, length, length, field, character); + field, length, field, character, character, character, length, field); }