/*
* 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.ignite.internal.jdbc2;
import java.net.URL;
import java.sql.Time;
import java.sql.Timestamp;
import java.sql.Types;
import java.util.Date;
import org.apache.ignite.internal.processors.query.QueryUtils;
import static java.sql.Types.BIGINT;
import static java.sql.Types.BINARY;
import static java.sql.Types.BOOLEAN;
import static java.sql.Types.DATE;
import static java.sql.Types.DOUBLE;
import static java.sql.Types.FLOAT;
import static java.sql.Types.INTEGER;
import static java.sql.Types.OTHER;
import static java.sql.Types.SMALLINT;
import static java.sql.Types.TIME;
import static java.sql.Types.TIMESTAMP;
import static java.sql.Types.TINYINT;
import static java.sql.Types.VARCHAR;
/**
* Utility methods for JDBC driver.
*/
public class JdbcUtils {
/**
* Converts Java class name to type from {@link Types}.
*
* @param cls Java class name.
* @return Type from {@link Types}.
*/
public static int type(String cls) {
if (Boolean.class.getName().equals(cls) || boolean.class.getName().equals(cls))
return BOOLEAN;
else if (Byte.class.getName().equals(cls) || byte.class.getName().equals(cls))
return TINYINT;
else if (Short.class.getName().equals(cls) || short.class.getName().equals(cls))
return SMALLINT;
else if (Integer.class.getName().equals(cls) || int.class.getName().equals(cls))
return INTEGER;
else if (Long.class.getName().equals(cls) || long.class.getName().equals(cls))
return BIGINT;
else if (Float.class.getName().equals(cls) || float.class.getName().equals(cls))
return FLOAT;
else if (Double.class.getName().equals(cls) || double.class.getName().equals(cls))
return DOUBLE;
else if (String.class.getName().equals(cls))
return VARCHAR;
else if (byte[].class.getName().equals(cls))
return BINARY;
else if (Time.class.getName().equals(cls))
return TIME;
else if (Timestamp.class.getName().equals(cls))
return TIMESTAMP;
else if (Date.class.getName().equals(cls) || java.sql.Date.class.getName().equals(cls))
return DATE;
else
return OTHER;
}
/**
* Converts Java class name to SQL type name.
*
* @param cls Java class name.
* @return SQL type name.
*/
public static String typeName(String cls) {
if (Boolean.class.getName().equals(cls) || boolean.class.getName().equals(cls))
return "BOOLEAN";
else if (Byte.class.getName().equals(cls) || byte.class.getName().equals(cls))
return "TINYINT";
else if (Short.class.getName().equals(cls) || short.class.getName().equals(cls))
return "SMALLINT";
else if (Integer.class.getName().equals(cls) || int.class.getName().equals(cls))
return "INTEGER";
else if (Long.class.getName().equals(cls) || long.class.getName().equals(cls))
return "BIGINT";
else if (Float.class.getName().equals(cls) || float.class.getName().equals(cls))
return "FLOAT";
else if (Double.class.getName().equals(cls) || double.class.getName().equals(cls))
return "DOUBLE";
else if (String.class.getName().equals(cls))
return "VARCHAR";
else if (byte[].class.getName().equals(cls))
return "BINARY";
else if (Time.class.getName().equals(cls))
return "TIME";
else if (Timestamp.class.getName().equals(cls))
return "TIMESTAMP";
else if (Date.class.getName().equals(cls) || java.sql.Date.class.getName().equals(cls))
return "DATE";
else
return "OTHER";
}
/**
* Determines whether type is nullable.
*
* @param name Column name.
* @param cls Java class name.
* @return {@code True} if nullable.
*/
public static boolean nullable(String name, String cls) {
return !"_KEY".equalsIgnoreCase(name) &&
!"_VAL".equalsIgnoreCase(name) &&
!(boolean.class.getName().equals(cls) ||
byte.class.getName().equals(cls) ||
short.class.getName().equals(cls) ||
int.class.getName().equals(cls) ||
long.class.getName().equals(cls) ||
float.class.getName().equals(cls) ||
double.class.getName().equals(cls));
}
/**
* Checks whether a class is SQL-compliant.
*
* @param cls Class.
* @return Whether given type is SQL-compliant.
*/
static boolean isSqlType(Class<?> cls) {
return QueryUtils.isSqlType(cls) || cls == URL.class;
}
}