All Downloads are FREE. Search and download functionalities are using the official Maven repository.

.circumflex-orm.1.2.source-code.vendor.scala Maven / Gradle / Ivy

package ru.circumflex.orm

class PostgreSQLDialect extends Dialect {
  override def quoteIdentifer(identifier: String) = "\"" + identifier + "\""
}

class MySQLDialect extends Dialect {
  override def textType = "VARCHAR(4096)"
  override def timestampType = "TIMESTAMP"
  override def supportsSchema_?(): Boolean = false
  override def supportsDropConstraints_?(): Boolean = false
  override def primaryKeyExpression(record: Record[_]) = "AUTO_INCREMENT"
  override def initializeRelation(relation: Relation[_]) = {}
  override def lastIdExpression(node: RelationNode[_]) =
    node.alias + "." + node.relation.primaryKey.name + " = LAST_INSERT_ID()"
  override def quoteIdentifer(identifier: String) = "`" + identifier + "`"
}

class OracleDialect extends Dialect {
  override def textType = "VARCHAR2(4096)"
  override def timestampType = "TIMESTAMP WITH TIMEZONE"
  override def primaryKeyExpression(record: Record[_]) = ""
  override def initializeRelation(relation: Relation[_]) = {
    val seqName = pkSequenceName(relation)
    val seq = new SchemaObject {
      val objectName = "SEQUENCE " + seqName
      val sqlDrop = "DROP SEQUENCE " + seqName
      val sqlCreate = "CREATE SEQUENCE " + seqName
    }
    val trigName = relation.relationName + "_id_auto"
    val trig = new SchemaObject() {
      def objectName = "TRIGGER " + trigName
      def sqlDrop = "DROP TRIGGER " + trigName
      def sqlCreate = "CREATE TRIGGER " + trigName +
              " BEFORE INSERT ON " + relation.qualifiedName + " FOR EACH ROW BEGIN\n" +
              "IF :new." + relation.primaryKey.name + " IS NULL THEN\n\t" +
              "SELECT " + seqName + ".NEXTVAL INTO NEW." + relation.primaryKey.name +
              " FROM " + relation.qualifiedName + ";\n" +
              "END IF;\nEND;"
    }
    relation.addPreAux(seq)
    relation.addPostAux(trig)
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy