2020-01-05 00:04:22 +01:00
package org.hso.ecommerce.db ;
import java.sql.Types ;
2020-01-05 01:41:45 +01:00
import org.hibernate.dialect.Dialect ;
import org.hibernate.dialect.function.SQLFunctionTemplate ;
import org.hibernate.dialect.function.StandardSQLFunction ;
import org.hibernate.dialect.function.VarArgsSQLFunction ;
import org.hibernate.type.StringType ;
2020-01-05 00:04:22 +01:00
public class SQLiteDialect extends Dialect {
public SQLiteDialect ( ) {
registerColumnType ( Types . BIT , " integer " ) ;
registerColumnType ( Types . TINYINT , " tinyint " ) ;
registerColumnType ( Types . SMALLINT , " smallint " ) ;
registerColumnType ( Types . INTEGER , " integer " ) ;
2020-01-05 01:41:45 +01:00
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 ( StringType . INSTANCE , " " , " || " , " " ) ) ;
registerFunction ( " mod " , new SQLFunctionTemplate ( StringType . INSTANCE , " ?1 % ?2 " ) ) ;
registerFunction ( " substr " , new StandardSQLFunction ( " substr " , StringType . INSTANCE ) ) ;
registerFunction ( " substring " , new StandardSQLFunction ( " substr " , StringType . INSTANCE ) ) ;
}
public boolean supportsIdentityColumns ( ) {
return true ;
}
/ *
public boolean supportsInsertSelectIdentity ( ) {
return true ; // As specify in NHibernate dialect
}
* /
public boolean hasDataTypeInIdentityColumn ( ) {
return false ; // As specify in NHibernate dialect
}
/ *
public String appendIdentitySelectToInsert ( String insertString ) {
return new StringBuffer ( insertString . length ( ) + 30 ) . // As specify in NHibernate dialect
append ( insertString ) .
append ( " ; " ) . append ( getIdentitySelectString ( ) ) .
toString ( ) ;
}
* /
public String getIdentityColumnString ( ) {
// return "integer primary key autoincrement";
return " integer " ;
}
public String getIdentitySelectString ( ) {
return " select last_insert_rowid() " ;
}
public boolean supportsLimit ( ) {
return true ;
}
protected String getLimitString ( String query , boolean hasOffset ) {
return new StringBuffer ( query . length ( ) + 20 ) .
append ( query ) .
append ( hasOffset ? " limit ? offset ? " : " limit ? " ) .
toString ( ) ;
}
public boolean supportsTemporaryTables ( ) {
return true ;
}
public String getCreateTemporaryTableString ( ) {
return " create temporary table if not exists " ;
}
public boolean dropTemporaryTableAfterUse ( ) {
return false ;
}
public boolean supportsCurrentTimestampSelection ( ) {
return true ;
2020-01-05 00:04:22 +01:00
}
2020-01-05 01:41:45 +01:00
public boolean isCurrentTimestampSelectStringCallable ( ) {
return false ;
}
public String getCurrentTimestampSelectString ( ) {
return " select current_timestamp " ;
}
public boolean supportsUnionAll ( ) {
return true ;
}
public boolean hasAlterTable ( ) {
return false ; // As specify in NHibernate dialect
}
public boolean dropConstraints ( ) {
return false ;
}
public String getAddColumnString ( ) {
return " add column " ;
}
public String getForUpdateString ( ) {
return " " ;
}
public boolean supportsOuterJoinForUpdate ( ) {
return false ;
}
public String getDropForeignKeyString ( ) {
throw new UnsupportedOperationException ( " No drop foreign key syntax supported by SQLiteDialect " ) ;
}
public String getAddForeignKeyConstraintString ( String constraintName ,
String [ ] foreignKey , String referencedTable , String [ ] primaryKey ,
boolean referencesPrimaryKey ) {
throw new UnsupportedOperationException ( " No add foreign key syntax supported by SQLiteDialect " ) ;
}
public String getAddPrimaryKeyConstraintString ( String constraintName ) {
throw new UnsupportedOperationException ( " No add primary key syntax supported by SQLiteDialect " ) ;
}
public boolean supportsIfExistsBeforeTableName ( ) {
return true ;
}
public boolean supportsCascadeDelete ( ) {
return false ;
}
2020-01-05 00:04:22 +01:00
}