importjava.sql.Types;importorg.hibernate.dialect.Dialect;importorg.hibernate.dialect.function.StandardSQLFunction;importorg.hibernate.dialect.function.SQLFunctionTemplate;importorg.hibernate.dialect.function.VarArgsSQLFunction;importorg.hibernate.type.StandardBasicTypes;public class SQLiteDialect extendsDialect {publicSQLiteDialect() {super();
registerColumnType(Types.BIT,"integer");
registerColumnType(Types.TINYINT,"tinyint");
registerColumnType(Types.SMALLINT,"smallint");
registerColumnType(Types.INTEGER,"integer");
registerColumnType(Types.BIGINT,"bigint");
registerColumnType(Types.FLOAT,"float");
registerColumnType(Types.REAL,"real");
registerColumnType(Types.DOUBLE,"double");
registerColumnType(Types.NUMERIC,"numeric");
registerColumnType(Types.DECIMAL,"decimal");
registerColumnType(Types.CHAR,"char");
registerColumnType(Types.VARCHAR,"varchar");
registerColumnType(Types.LONGVARCHAR,"longvarchar");
registerColumnType(Types.DATE,"date");
registerColumnType(Types.TIME,"time");
registerColumnType(Types.TIMESTAMP,"timestamp");
registerColumnType(Types.BINARY,"blob");
registerColumnType(Types.VARBINARY,"blob");
registerColumnType(Types.LONGVARBINARY,"blob");//registerColumnType(Types.NULL, "null");
registerColumnType(Types.BLOB, "blob");
registerColumnType(Types.CLOB,"clob");
registerColumnType(Types.BOOLEAN,"integer");
registerFunction("concat", new VarArgsSQLFunction(StandardBasicTypes.STRING, "", "||", ""));
registerFunction("mod", new SQLFunctionTemplate(StandardBasicTypes.INTEGER, "?1 % ?2"));
registerFunction("substr", new StandardSQLFunction("substr", StandardBasicTypes.STRING));
registerFunction("substring", new StandardSQLFunction("substr", StandardBasicTypes.STRING));
}public booleansupportsIdentityColumns() {return true;
}public booleanhasDataTypeInIdentityColumn() {return false;
}publicString getIdentityColumnString() {return "integer";
}publicString getIdentitySelectString() {return "select last_insert_rowid()";
}public booleansupportsLimit() {return true;
}public String getLimitString(String query, booleanhasOffset) {return new StringBuffer(query.length() + 20).append(query).append(hasOffset ? " limit ? offset ?" : " limit ?")
.toString();
}public booleansupportsTemporaryTables() {return true;
}publicString getCreateTemporaryTableString() {return "create temporary table if not exists";
}public booleandropTemporaryTableAfterUse() {return false;
}public booleansupportsCurrentTimestampSelection() {return true;
}public booleanisCurrentTimestampSelectStringCallable() {return false;
}publicString getCurrentTimestampSelectString() {return "select current_timestamp";
}public booleansupportsUnionAll() {return true;
}public booleanhasAlterTable() {return false;
}public booleandropConstraints() {return false;
}publicString getAddColumnString() {return "add column";
}publicString getForUpdateString() {return "";
}public booleansupportsOuterJoinForUpdate() {return false;
}publicString getDropForeignKeyString() {throw new UnsupportedOperationException("No drop foreign key syntax supported by SQLiteDialect");
}publicString getAddForeignKeyConstraintString(String constraintName, String[] foreignKey, String referencedTable,
String[] primaryKey,booleanreferencesPrimaryKey) {throw new UnsupportedOperationException("No add foreign key syntax supported by SQLiteDialect");
}publicString getAddPrimaryKeyConstraintString(String constraintName) {throw new UnsupportedOperationException("No add primary key syntax supported by SQLiteDialect");
}public booleansupportsIfExistsBeforeTableName() {return true;
}public booleansupportsCascadeDelete() {return false;
}
@Overridepublic booleanbindLimitParametersInReverseOrder() {return true;
}
}