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

com.datawizards.dmg.dialects.RedshiftDialect.scala Maven / Gradle / Ivy

The newest version!
package com.datawizards.dmg.dialects

import com.datawizards.dmg.metadata._

object RedshiftDialect extends DatabaseDialect {
  override def intType: String = "INTEGER"

  override def stringType: String = "VARCHAR"

  override def longType: String = "BIGINT"

  override def doubleType: String = "DOUBLE PRECISION"

  override def floatType: String = "REAL"

  override def shortType: String = "SMALLINT"

  override def booleanType: String = "BOOLEAN"

  override def byteType: String = "SMALLINT"

  override def dateType: String = "DATE"

  override def timestampType: String = "TIMESTAMP"

  override def binaryType: String = generateArrayTypeExpression(byteType)

  override def bigDecimalType: String = "DECIMAL(38,18)"

  override def bigIntegerType: String = "BIGINT"

  override def generateArrayTypeExpression(elementTypeExpression: String): String = {
    log.warn("Redshift doesn't support ARRAY type. Column converted to VARCHAR.")
    "VARCHAR"
  }

  override def generateClassTypeExpression(classTypeMetaData: ClassTypeMetaData, fieldNamesWithExpressions: Iterable[(String, String)]): String = {
    log.warn("Redshift doesn't support Struct type. Column converted to VARCHAR.")
    "VARCHAR"
  }

  override def generateMapTypeExpression(keyExpression: String, valueExpression: String): String = {
    log.warn("Redshift doesn't support Map type. Column converted to VARCHAR")
    "VARCHAR"
  }

  override def toString: String = "RedshiftDialect"

  override protected def fieldAdditionalExpressions(f: ClassFieldMetaData): String =
    notNullExpression(f)

  override protected def additionalTableProperties(classTypeMetaData: ClassTypeMetaData): String = ""

  override protected def additionalTableExpressions(classTypeMetaData: ClassTypeMetaData): String =
    (
      if(comment(classTypeMetaData).isDefined)
        s"\nCOMMENT ON TABLE ${classTypeMetaData.typeName} IS '${comment(classTypeMetaData).get}';"
      else ""
    ) + classTypeMetaData.fields.map(f =>
      if(comment(f).isDefined)
        s"\nCOMMENT ON COLUMN ${classTypeMetaData.typeName}.${f.fieldName} IS '${comment(f).get}';"
      else ""
    ).mkString("")

  private def notNullExpression(f: ClassFieldMetaData): String =
    if(notNull(f)) " NOT NULL" else ""

  override protected def reservedKeywords = Seq(
    "ALL",
    "ALTER",
    "AND",
    "AS",
    "BETWEEN",
    "CASE",
    "COLUMN",
    "CREATE",
    "DATABASE",
    "DATE",
    "DELETE",
    "DISTINCT",
    "DROP",
    "ELSE",
    "END",
    "EXISTS",
    "FALSE",
    "FETCH",
    "FULL",
    "GRANT",
    "GROUP",
    "HAVING",
    "INNER",
    "INSERT",
    "INTO",
    "JOIN",
    "LEFT",
    "NOT",
    "NULL",
    "OR",
    "ORDER",
    "OUTER",
    "SELECT",
    "TABLE",
    "TRUE",
    "UNION",
    "UPDATE",
    "USER",
    "USING",
    "VALUES",
    "WHEN",
    "WHERE"
  )

  override protected def escapeColumnName(columnName: String) =
    s""""$columnName""""
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy