In most cases, RenderNameStyle.AS_IS will work correctly for the SQL generated by jOOQ, except when:
- SQL identifiers are case-sensitive - SQL identifiers contain special characters Cheers Lukas 2012/11/23 Ben Hood <[email protected]>: > I think I may have a workaround for my alias escaping issue with HSQLDB: > > Settings s = new Settings(); > s.setRenderNameStyle(RenderNameStyle.AS_IS); > Factory db = new Factory(ds, SQLDialect.HSQLDB, s) > > I'm not sure whether this will have any other unwanted side effects though. > > On Fri, Nov 23, 2012 at 4:35 PM, Ben Hood <[email protected]> wrote: >> >> So I'm proceeding with the following for now: >> >> Things a = THINGS.as("a"); >> Field<Date> truncDay = Factory.field("trunc({0}, {1})", SQLDataType.DATE, >> a.ENTRY_DATE, inline("DD")).as("day"); >> >> Which renders on HSQL >> >> trunc("a"."ENTRY_DATE", 'DD') as "day" >> >> Which is cool, but I was wondering if there is way to get rid of the >> quotes around day, i.e. >> >> trunc("a"."ENTRY_DATE", 'DD') as day >> >> ? >> >> >> >> On Fri, Nov 23, 2012 at 12:48 PM, Lukas Eder <[email protected]> wrote: >>> >>> According to the Javadocs of field(String, Class, QueryPart...), you >>> should only supply QueryPart objects to the plain SQL field: >>> >>> http://www.jooq.org/javadoc/latest/org/jooq/impl/Factory.html#field(java.lang.String, >>> java.lang.Class, org.jooq.QueryPart...) >>> >>> If you pass a org.jooq.DatePart object, the compiler will infer this >>> method, instead: >>> >>> http://www.jooq.org/javadoc/latest/org/jooq/impl/Factory.html#field(java.lang.String, >>> java.lang.Class, java.lang.Object...) >>> >>> Where Object... is an array of bind values. You have several options, >>> for instance: >>> - Factory.field("trunc({0}, day)", ...); >>> - Factory.field("trunc({0}, {1}", ..., Factory.inline("day")); >>> >>> Or, again, you can create a CustomField to correctly handle >>> dialect-specific behaviour of the TRUNC function: >>> >>> http://www.jooq.org/doc/2.6/manual/sql-building/queryparts/custom-queryparts/ >>> >>> Cheers >>> Lukas >>> >>> 2012/11/23 Ben Hood <[email protected]>: >>> > Following this example, if I attempt the following: >>> > >>> > Field<Date> day = Factory.field("trunc({0}, {1})", SQLDataType.DATE, >>> > THINGS.ENTRY_DATE, DatePart.DAY); >>> > >>> > I get the following exception: >>> > >>> > org.jooq.exception.SQLDialectNotSupportedException: Type class >>> > org.jooq.DatePart is not supported in dialect null >>> > at >>> > org.jooq.impl.AbstractDataType.getDataType(AbstractDataType.java:478) >>> > at org.jooq.impl.FieldTypeHelper.getDataType(FieldTypeHelper.java:972) >>> > at org.jooq.impl.Factory.getDataType(Factory.java:6245) >>> > at org.jooq.impl.Util.queryParts(Util.java:533) >>> > at org.jooq.impl.SQLField.<init>(SQLField.java:59) >>> > at org.jooq.impl.Factory.field(Factory.java:1291) >>> > >>> > I also tried this with Factory instance method, i.e. >>> > >>> > Factory db = new Factory(ds, SQLDialect.HSQLDB); >>> > Field<Date> day = db.field("trunc({0}, {1})", SQLDataType.DATE, >>> > THINGS.ENTRY_DATE, DatePart.DAY); >>> > >>> > and I got the same error. >>> > >>> > Is there a better way to supply the dialect? >>> > >>> > On Fri, Nov 23, 2012 at 12:20 PM, Lukas Eder <[email protected]> >>> > wrote: >>> >> >>> >> Factory.field("trunc({0}, {1})", SQLDataType.TIMESTAMP, date, >>> >> datepart); >>> > >>> > >> >> >
