# FIXME there must be a more formal and flexible structure to keep track and do
# comparisons on all aliases of data types

redshift_to_snowflake:
  # signed two-byte integer
  SMALLINT({precision},{scale}): NUMBER(16,0)
  # INT2:     NUMBER(16,0)

  # signed four-byte integer
  INTEGER({precision},{scale}): NUMBER(32,0)
  # INT:     NUMBER(38,0)
  # INT4:    NUMBER(38,0)

  # FIXME Redshift BIGINT is precision of 64, max in Snowflake is 38
  # signed eight-byte integer
  BIGINT({precision},{scale}): NUMBER(38,0)
  # INT8:   NUMBER(38,0)

  # exact numeric of selectable precision
  NUMERIC({precision},{scale}): NUMBER({precision},{scale})
  # DECIMAL({precision},{scale}): NUMBER({precision},{scale})

  # single precision floating-point number
  REAL: FLOAT
  # FLOAT4: REAL

  # double prevision floating-point number
  DOUBLE PRECISION: FLOAT
  # FLOAT8:           FLOAT
  # FLOAT:          FLOAT

  # logical Boolean (true/false)
  BOOLEAN: VARCHAR(1)
  # BOOL:    VARCHAR(1)

  # fixed-length character string
  CHARACTER({length}): VARCHAR({length})
  # CHAR({length}): VARCHAR({length})
  # NCHAR({length}): VARCHAR({length})
  # BPCHAR({length}): VARCHAR({length})

  # variable-length character string with a user-defined limit
  CHARACTER VARYING({length}): VARCHAR({length})
  # VARCHAR({length}): VARCHAR({length})
  # NVARCHAR({length}): VARCHAR({length})
  # TEXT({length}): VARCHAR({length})

  # calendar date(year, month, day)
  DATE: DATE

  # data and time (without time zone)
  TIMESTAMP WITHOUT TIME ZONE: TIMESTAMP_NTZ(3)
  # TIMESTAMP: TIMESTAMP_NTZ(3)


mysql_to_snowflake:
  # different types of integers
  TINYINT({precision},{scale}): NUMBER(4,0)
  SMALLINT({precision},{scale}): NUMBER(6,0)
  MEDIUMINT({precision},{scale}): NUMBER(8,0)
  INT({precision},{scale}): NUMBER(12,0)
  INTEGER({precision},{scale}): NUMBER(12,0)
  BIGINT({precision},{scale}): NUMBER(38,0)

  # decimal type (max scale in art_relations is 7, so 10 should be enough)
  DECIMAL({precision},{scale}): NUMBER(38,10)

  # floating-point number
  FLOAT: FLOAT
  FLOAT({precision},{scale}): FLOAT
  DOUBLE: FLOAT
  DOUBLE PRECISION: FLOAT
  REAL: FLOAT

  # logical Boolean (true/false)
  # we're using VARCHAR(1) since many old Snowflake tables using it
  BOOLEAN: VARCHAR(1)

  # character strings
  CHAR({length}): VARCHAR({length})
  VARCHAR({length}): VARCHAR({length})
  TEXT({length}): VARCHAR({length})
  TINYTEXT({length}): VARCHAR({length})
  MEDIUMTEXT({length}): VARCHAR({length})
  LONGTEXT({length}): VARCHAR({length})
  ENUM({length}): VARCHAR({length})
  SET({length}): VARCHAR({length})

  # calendar date(year, month, day)
  DATE: DATE
  TIME: TIME
  DATETIME: TIMESTAMP_NTZ(3)
  TIMESTAMP: TIMESTAMP_NTZ(3)

  # binary types
  BINARY({length}): BINARY({length})
  BIT({length}): BINARY({length})
  BLOB: BINARY
  LONGBLOB: BINARY

  # semi-structured data
  JSON: VARIANT
