/** * 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. */ package org.apache.hive.hplsql; /** * On-the-fly SQL Converter */ public class Converter { Exec exec; boolean trace = false; Converter(Exec e) { exec = e; trace = exec.getTrace(); } /** * Convert a data type */ String dataType(HplsqlParser.DtypeContext type, HplsqlParser.Dtype_lenContext len) { String t = exec.getText(type); boolean enclosed = false; if (t.charAt(0) == '[') { t = t.substring(1, t.length() - 1); enclosed = true; } if (t.equalsIgnoreCase("BIT")) { t = "TINYINT"; } else if (t.equalsIgnoreCase("INT") || t.equalsIgnoreCase("INTEGER")) { // MySQL can use INT(n) } else if (t.equalsIgnoreCase("INT2")) { t = "SMALLINT"; } else if (t.equalsIgnoreCase("INT4")) { t = "INT"; } else if (t.equalsIgnoreCase("INT8")) { t = "BIGINT"; } else if (t.equalsIgnoreCase("DATETIME") || t.equalsIgnoreCase("SMALLDATETIME")) { t = "TIMESTAMP"; } else if ((t.equalsIgnoreCase("VARCHAR") || t.equalsIgnoreCase("NVARCHAR")) && len.T_MAX() != null) { t = "STRING"; } else if (t.equalsIgnoreCase("VARCHAR2") || t.equalsIgnoreCase("NCHAR") || t.equalsIgnoreCase("NVARCHAR") || t.equalsIgnoreCase("TEXT")) { t = "STRING"; } else if (t.equalsIgnoreCase("NUMBER") || t.equalsIgnoreCase("NUMERIC")) { t = "DECIMAL"; if (len != null) { t += exec.getText(len); } } else if (len != null) { if (!enclosed) { return exec.getText(type, type.getStart(), len.getStop()); } else { return t + exec.getText(len, len.getStart(), len.getStop()); } } else if (!enclosed) { return exec.getText(type, type.getStart(), type.getStop()); } return t; } }