public SQLiteTemplates(char escape, boolean quote) {
super("\"", escape, quote);
setDummyTable(null);
addCustomType(BigDecimalAsDoubleType.DEFAULT);
addCustomType(BigIntegerAsLongType.DEFAULT);
setUnionsWrapped(false);
setLimitRequired(true);
setNullsFirst(null);
setNullsLast(null);
setDefaultValues("\ndefault values");
setArraysSupported(false);
setPrecedence(Precedence.COMPARISON - 1, Ops.LT, Ops.GT, Ops.LOE, Ops.GOE);
setPrecedence(Precedence.COMPARISON, Ops.EQ, Ops.EQ_IGNORE_CASE, Ops.NE);
add(Ops.MOD, "{0} % {1}", Precedence.ARITH_HIGH);
add(Ops.INDEX_OF, "charindex({1},{0},1)-1", Precedence.ARITH_LOW);
add(Ops.INDEX_OF_2ARGS, "charindex({1},{0},{2s}+1)-1", Precedence.ARITH_LOW);
add(Ops.StringOps.LOCATE, "charindex({0},{1})");
add(Ops.StringOps.LOCATE2, "charindex({0},{1},{2s})");
add(Ops.DateTimeOps.YEAR, "cast(strftime('%Y',{0} / 1000, 'unixepoch', 'localtime') as integer)");
add(Ops.DateTimeOps.MONTH, "cast(strftime('%m',{0} / 1000, 'unixepoch', 'localtime') as integer)");
add(Ops.DateTimeOps.WEEK, "cast(strftime('%W',{0} / 1000, 'unixepoch', 'localtime') as integer) + 1");
add(Ops.DateTimeOps.DAY_OF_MONTH, "cast(strftime('%d',{0} / 1000, 'unixepoch', 'localtime') as integer)");
add(Ops.DateTimeOps.DAY_OF_WEEK, "cast(strftime('%w',{0} / 1000, 'unixepoch', 'localtime') as integer) + 1");
add(Ops.DateTimeOps.DAY_OF_YEAR, "cast(strftime('%j',{0} / 1000, 'unixepoch', 'localtime') as integer)");
add(Ops.DateTimeOps.HOUR, "cast(strftime('%H',{0} / 1000, 'unixepoch', 'localtime') as integer)");