# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
# http:# www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

{
  types: [
    {from: "Int", to: "BigInt", major: "Fixed"},
    {from: "Float4", to: "Float8", major: "Fixed" }, 
    {from: "Int", to: "Float4", major: "Fixed" },
    {from: "BigInt", to: "Float4", major: "Fixed" },
    {from: "Int", to: "Float8", major: "Fixed" },
    {from: "BigInt", to: "Float8", major: "Fixed" },
    {to: "Int", from: "BigInt", explicit: "int", major: "Fixed"},
    {to: "Float4", from: "Float8" , explicit: "float", major: "Fixed"}, 
    {to: "Int", from: "Float4" , explicit: "int", native: "float", major: "Fixed"},
    {to: "BigInt", from: "Float4" , explicit: "long", native: "float", major: "Fixed"},
    {to: "Int", from: "Float8" , explicit: "int", native: "double", major: "Fixed"},
    {to: "BigInt", from: "Float8" , explicit: "long", native: "double", major: "Fixed"},
    {from: "TinyInt", to: "Bit", major: "Fixed"},
    {from: "Bit", to: "TinyInt", explicit: "byte", major: "Fixed"},
    
    {from: "VarChar", to: "BigInt", major: "SrcVarlen", javaType: "Long", primeType: "long"},
    {from: "VarChar", to: "Int", major: "SrcVarlen", javaType:"Integer", primeType:"int"},
    {from: "VarBinary", to: "BigInt", major: "SrcVarlen", javaType: "Long", primeType : "long"},
    {from: "VarBinary", to: "Int", major: "SrcVarlen", javaType:"Integer", primeType : "int"},   
    {from: "VarChar", to: "Float4", major: "SrcVarlen", javaType:"Float", parse:"Float"},
    {from: "VarChar", to: "Float8", major: "SrcVarlen", javaType:"Double", parse:"Double"},
    {from: "VarBinary", to: "Float4", major: "SrcVarlen", javaType:"Float", parse:"Float"},
    {from: "VarBinary", to: "Float8", major: "SrcVarlen", javaType:"Double", parse:"Double"}, 

    {from: "BigInt", to: "VarChar", major: "TargetVarlen", javaType: "Long", bufferLength:"20"},
    {from: "Int", to: "VarChar", major: "TargetVarlen", javaType: "Integer", bufferLength:"11"},
    {from: "Float4", to: "VarChar", major: "TargetVarlen", javaType: "Float", bufferLength:"100"},
    {from: "Float8", to: "VarChar", major: "TargetVarlen", javaType: "Double", bufferLength:"100"},
    {from: "BigInt", to: "VarBinary", major: "TargetVarlen", javaType: "Long", bufferLength:"20"},
    {from: "Int", to: "VarBinary", major: "TargetVarlen", javaType: "Integer", bufferLength:"11"},
    {from: "Float4", to: "VarBinary", major: "TargetVarlen", javaType: "Float", bufferLength:"100"},
    {from: "Float8", to: "VarBinary", major: "TargetVarlen", javaType: "Double", bufferLength:"100"},     
    
    {from: "VarBinary", to: "VarChar", major: "SrcVarlenTargetVarlen"},
    {from: "VarChar", to: "VarChar", major: "SrcVarlenTargetVarlen"},
    {from: "VarChar", to: "VarBinary", major: "SrcVarlenTargetVarlen"},
    {from: "VarBinary", to: "VarBinary", major: "SrcVarlenTargetVarlen"},

    {from: "Date", to: "TimeStamp", major: "Date"},
    {from: "TimeStamp", to: "Date", major: "Date", alias: "to_date"},

    {from: "VarChar", to: "Date", major: "VarCharDate", alias: "datetype"},
    {from: "VarChar", to: "TimeStamp", major: "VarCharDate", alias: "timestamptype"},
    {from: "VarChar", to: "Time", major: "VarCharDate", alias: "timetype"},

    {from: "VarChar", to: "NullableDate", major: "NullableVarCharDate"},
    {from: "VarChar", to: "NullableTimeStamp", major: "NullableVarCharDate"},
    {from: "VarChar", to: "NullableTime", major: "NullableVarCharDate"},

    {from: "NullableVarChar", to: "NullableDate", major: "NullableVarCharDate"},
    {from: "NullableVarChar", to: "NullableTimeStamp", major: "NullableVarCharDate"},
    {from: "NullableVarChar", to: "NullableTime", major: "NullableVarCharDate"},

    {from: "VarBinary", to: "Date", major: "VarBinaryDate", alias: "datetype"},
    {from: "VarBinary", to: "TimeStamp", major: "VarBinaryDate", alias: "timestamptype"},
    {from: "VarBinary", to: "Time", major: "VarBinaryDate", alias: "timetype"},

    {from: "VarBinary", to: "NullableDate", major: "NullableVarCharDate"},
    {from: "VarBinary", to: "NullableTimeStamp", major: "NullableVarCharDate"},
    {from: "VarBinary", to: "NullableTime", major: "NullableVarCharDate"},

    {from: "NullableVarBinary", to: "NullableDate", major: "NullableVarCharDate"},
    {from: "NullableVarBinary", to: "NullableTimeStamp", major: "NullableVarCharDate"},
    {from: "NullableVarBinary", to: "NullableTime", major: "NullableVarCharDate"},

    {from: "NullableVar16Char", to: "NullableDate", major: "NullableVarCharDate"},
    {from: "NullableVar16Char", to: "NullableTimeStamp", major: "NullableVarCharDate"},
    {from: "NullableVar16Char", to: "NullableTime", major: "NullableVarCharDate"},

    {from: "Date", to: "VarChar", major: "DateVarChar", bufferLength: "10"}
    {from: "TimeStamp", to: "VarChar", major: "DateVarChar", bufferLength: "23"},
    {from: "Time", to: "VarChar", major: "DateVarChar", bufferLength: "12"},

    {from: "VarChar", to: "Interval", major: "VarCharInterval"},
    {from: "VarChar", to: "IntervalDay", major: "VarCharInterval"},
    {from: "VarChar", to: "IntervalYear", major: "VarCharInterval"},

    {from: "VarChar", to: "NullableInterval", major: "NullableVarCharInterval"},
    {from: "VarChar", to: "NullableIntervalDay", major: "NullableVarCharInterval"},
    {from: "VarChar", to: "NullableIntervalYear", major: "NullableVarCharInterval"},

    {from: "NullableVarChar", to: "NullableInterval", major: "NullableVarCharInterval"},
    {from: "NullableVarChar", to: "NullableIntervalDay", major: "NullableVarCharInterval"},
    {from: "NullableVarChar", to: "NullableIntervalYear", major: "NullableVarCharInterval"},

    {from: "Interval", to: "VarChar", major: "IntervalVarChar", bufferLength: "65"},
    {from: "IntervalYear", to: "VarChar", major: "IntervalYearVarChar", bufferLength: "35"},
    {from: "IntervalDay", to: "VarChar", major: "IntervalDayVarChar", bufferLength: "43"},

    {from: "IntervalYear", to: "Interval", major: "IntervalSimpleToComplex", months: "in.value", days: "0", millis: "0"},
    {from: "IntervalDay", to: "Interval", major: "IntervalSimpleToComplex", months: "0", days: "in.days", millis: "in.milliseconds"},
    {from: "Interval", to: "IntervalYear", major: "IntervalComplexToSimple"},
    {from: "Interval", to: "IntervalDay", major: "IntervalComplexToSimple"},

    {from: "Decimal9", to: "VarDecimal", major: "DecimalToVarDecimal"},
    {from: "Decimal18", to: "VarDecimal", major: "DecimalToVarDecimal"},
    {from: "Decimal28Sparse", to: "VarDecimal", major: "DecimalToVarDecimal"},
    {from: "Decimal38Sparse", to: "VarDecimal", major: "DecimalToVarDecimal"},
    {from: "VarDecimal", to: "VarDecimal", major: "DecimalToVarDecimal"},

    {from: "VarDecimal", to: "Decimal9", major: "VarDecimalToDecimal"},
    {from: "VarDecimal", to: "Decimal18", major: "VarDecimalToDecimal"},
    {from: "VarDecimal", to: "Decimal28Sparse", major: "VarDecimalToDecimal", arraySize: "5"},
    {from: "VarDecimal", to: "Decimal38Sparse", major: "VarDecimalToDecimal", arraySize: "6"},

    {from: "Int", to: "VarDecimal", major: "IntDecimal"},

    {from: "BigInt", to: "VarDecimal", major: "BigIntDecimal"},

    {from: "VarDecimal", to: "Int", major: "DecimalComplexInt", javatype: "int"},

    {from: "VarDecimal", to: "BigInt", major: "DecimalComplexBigInt", javatype: "long"},

    {from: "VarDecimal", to: "Float4", major: "DecimalComplexFloat", javatype: "float"},

    {from: "Float4", to: "VarDecimal", major: "FloatDecimalComplex"},

    {from: "Float8", to: "VarDecimal", major: "DoubleDecimalComplex"},

    {from: "VarDecimal", to: "Float8", major: "DecimalComplexDouble", javatype: "double"},

    {from: "VarChar", to: "VarDecimal", major: "VarCharDecimalComplex"},

    {from: "VarDecimal", to: "VarChar", major: "DecimalComplexVarChar"},

    {from: "VarChar", to: "NullableInt", major: "EmptyString", javaType:"Integer", primeType:"int"},
    {from: "VarChar", to: "NullableBigInt", major: "EmptyString", javaType: "Long", primeType: "long"},
    {from: "VarChar", to: "NullableFloat4", major: "EmptyString", javaType:"Float", parse:"Float"},
    {from: "VarChar", to: "NullableFloat8", major: "EmptyString", javaType:"Double", parse:"Double"},

    {from: "VarChar", to: "NullableVarDecimal", major: "NullableVarCharDecimalComplex"},

    {from: "NullableVarChar", to: "NullableInt", major: "EmptyString", javaType:"Integer", primeType:"int"},
    {from: "NullableVarChar", to: "NullableBigInt", major: "EmptyString", javaType: "Long", primeType: "long"},
    {from: "NullableVarChar", to: "NullableFloat4", major: "EmptyString", javaType:"Float", parse:"Float"},
    {from: "NullableVarChar", to: "NullableFloat8", major: "EmptyString", javaType:"Double", parse:"Double"},

    {from: "NullableVarChar", to: "NullableVarDecimal", major: "NullableVarCharDecimalComplex"},

    {from: "NullableVar16Char", to: "NullableInt", major: "EmptyString", javaType:"Integer", primeType:"int"},
    {from: "NullableVar16Char", to: "NullableBigInt", major: "EmptyString", javaType: "Long", primeType: "long"},
    {from: "NullableVar16Char", to: "NullableFloat4", major: "EmptyString", javaType:"Float", parse:"Float"},
    {from: "NullableVar16Char", to: "NullableFloat8", major: "EmptyString", javaType:"Double", parse:"Double"},

    {from: "NullableVar16Char", to: "NullableVarDecimal", major: "NullableVarCharDecimalComplex"},

    {from: "NullableVarBinary", to: "NullableInt", major: "EmptyString", javaType:"Integer", primeType:"int"},
    {from: "NullableVarBinary", to: "NullableBigInt", major: "EmptyString", javaType: "Long", primeType: "long"},
    {from: "NullableVarBinary", to: "NullableFloat4", major: "EmptyString", javaType:"Float", parse:"Float"},
    {from: "NullableVarBinary", to: "NullableFloat8", major: "EmptyString", javaType:"Double", parse:"Double"},

    {from: "NullableVarBinary", to: "NullableVarDecimal", major: "NullableVarCharDecimalComplex"},

    {from: "UntypedNull", to: "Bit", major: "UntypedNull"},
    {from: "UntypedNull", to: "TinyInt", major: "UntypedNull"},
    {from: "UntypedNull", to: "Int", major: "UntypedNull"},
    {from: "UntypedNull", to: "BigInt", major: "UntypedNull"},
    {from: "UntypedNull", to: "Float4", major: "UntypedNull"},
    {from: "UntypedNull", to: "Float8", major: "UntypedNull"},
    {from: "UntypedNull", to: "Date", major: "UntypedNull"},
    {from: "UntypedNull", to: "Time", major: "UntypedNull"},
    {from: "UntypedNull", to: "TimeStamp", major: "UntypedNull"},
    {from: "UntypedNull", to: "Interval", major: "UntypedNull"},
    {from: "UntypedNull", to: "IntervalDay", major: "UntypedNull"},
    {from: "UntypedNull", to: "IntervalYear", major: "UntypedNull"},
    {from: "UntypedNull", to: "VarBinary", major: "UntypedNull"},
    {from: "UntypedNull", to: "VarChar", major: "UntypedNull"},
    {from: "UntypedNull", to: "Var16Char", major: "UntypedNull"},
    {from: "UntypedNull", to: "VarDecimal", major: "UntypedNull"}
  ]
}
