Package com.taobao.tdhs.jdbc.exception

Examples of com.taobao.tdhs.jdbc.exception.TDHSSQLException


    }

    public ResultSet executeQuery(String sql) throws SQLException {
        execute(sql);
        if (currentResultSet == null) {
            throw new TDHSSQLException("None ResultSet!", sql);
        }
        return currentResultSet;
    }
View Full Code Here


    private void doSelectOrCount(com.taobao.tdhs.client.statement.Statement s, ParseSQL parseSQL, String tableName,
                                 String dbName) throws SQLException {
        Query query = preprocessGet(s, parseSQL, tableName, dbName);
        List<Entry<String, String>> columns = parseSQL.getColumns();
        if (columns == null || columns.isEmpty()) {
            throw new TDHSSQLException("no columns to select!", parseSQL.getSql());
        }
        String[] field = new String[columns.size()];
        String[] alias = new String[columns.size()];
        int i = 0;
        for (Entry<String, String> e : columns) {
            String f = StringUtil.escapeField(e.getValue());
            if (f == null) {
                throw new TDHSSQLException("error in field[" + e.getValue() + "]", parseSQL.getSql());
            }
            field[i] = f;
            String a = StringUtil.escapeField(e.getKey());
            if (a == null) {
                throw new TDHSSQLException("error in alias[" + e.getKey() + "]", parseSQL.getSql());
            }
            alias[i++] = a;
        }
        if (field.length == 1 && field[0].equalsIgnoreCase("count(*)") && !columns.get(0).getValue().startsWith("`")) {
            TDHSResponse response = null;
View Full Code Here

    private Query preprocessGet(com.taobao.tdhs.client.statement.Statement s, ParseSQL parseSQL, String tableName,
                                String dbName) throws TDHSSQLException {
        Query query = s.query().use(dbName).from(tableName);
        List<OperationStruct> operation = parseSQL.getListOperationStructs();
        if (StringUtils.isNotBlank(parseSQL.getErrmsg())) {
            throw new TDHSSQLException(parseSQL.getErrmsg(), parseSQL.getSql());
        }
        if (operation == null || operation.isEmpty()) {
            throw new TDHSSQLException("must have some where condition!", parseSQL.getSql());
        }
        List<OperationStruct> keys = new ArrayList<OperationStruct>(2);
        HintStruct hint = parseSQL.getHint();
        if (hint != null && StringUtils.isBlank(hint.getErrmsg()) && StringUtils.isNotBlank(hint.getIndexName())) {
            String index = hint.getIndexName();
            List<String> listIndexColumns = hint.getListIndexColumns();
            if (listIndexColumns == null || listIndexColumns.isEmpty()) {
                throw new TDHSSQLException("can't get columns from hint", parseSQL.getSql());
            }
            Map<String, List<OperationStruct>> mapOperationStructs = parseSQL.getMapOperationStructs();
            for (String hintKey : listIndexColumns) {
                List<OperationStruct> k = mapOperationStructs.get(hintKey);
                if ((k == null || k.isEmpty())) {
                    if (keys.isEmpty()) {
                        throw new TDHSSQLException("don't find key in Index!", parseSQL.getSql());
                    } else {
                        break;
                    }
                }
                if (keys.isEmpty()) {
                    keys.add(k.get(0));
                    if ("in".equalsIgnoreCase(k.get(0).getOper())) {
                        //in的话只处理一个
                        break;
                    }
                } else {
                    if (keys.get(0).getOper().equalsIgnoreCase(k.get(0).getOper())) {
                        keys.add(k.get(0));
                    } else {
                        break;
                    }
                }
            }

            List<String> orderByColumn = parseSQL.getOrderByColumn();
            if (!keys.get(0).getOper().equalsIgnoreCase("=") &&
                    ((orderByColumn != null && !orderByColumn.isEmpty()) || parseSQL.getSortMethod() != null)) {
                throw new TDHSSQLException("can't support this orderBy!", parseSQL.getSql());
            }

            if (orderByColumn != null) {
                if (orderByColumn.size() > listIndexColumns.size()) {
                    throw new TDHSSQLException("too many orderBy columns for this index!", parseSQL.getSql());
                }
                int j = 0;
                for (String oc : orderByColumn) {
                    String indexField = listIndexColumns.get(listIndexColumns.size() - orderByColumn.size() + j);
                    if (!indexField.equalsIgnoreCase(oc)) {
                        throw new TDHSSQLException(
                                "can't support this orderBy columns which is not in index or error sort!",
                                parseSQL.getSql());
                    }

                }
            }
            Where where = query.where().index(index);
            processKey(parseSQL, keys, where);
        } else {
            if (hint != null && StringUtils.isNotBlank(hint.getErrmsg())) {
                logger.warn("TDHS: JDBC hint error:" + hint.getErrmsg() + " , SQL:" + parseSQL.getSql());
            }
            List<String> orderByColumn = parseSQL.getOrderByColumn();
            if ((orderByColumn != null && !orderByColumn.isEmpty()) || parseSQL.getSortMethod() != null) {
                throw new TDHSSQLException("can't support orderBy without hint!", parseSQL.getSql());
            }
            OperationStruct firstKey = operation.get(0);
            keys.add(firstKey);
            String firstField = StringUtil.escapeField(firstKey.getColumnName());
            if (firstField == null) {
                throw new TDHSSQLException("error field [" + firstKey.getColumnName() + "]", parseSQL.getSql());
            }
            Where where = query.where().fields(firstField);
            processKey(parseSQL, keys, where);

        }

        for (OperationStruct o : operation) {
            if (!keys.contains(o)) {
                String op = o.getOper();
                if ("=".equalsIgnoreCase(op)) {
                    PerprocessFilter perprocessFilter = new PerprocessFilter(parseSQL, o).invoke();
                    String f = perprocessFilter.getF();
                    String v = perprocessFilter.getV();
                    query.and().field(f).equal(v);
                } else if ("!=".equalsIgnoreCase(op)) {
                    PerprocessFilter perprocessFilter = new PerprocessFilter(parseSQL, o).invoke();
                    String f = perprocessFilter.getF();
                    String v = perprocessFilter.getV();
                    query.and().field(f).not(v);
                } else if (">".equalsIgnoreCase(op)) {
                    PerprocessFilter perprocessFilter = new PerprocessFilter(parseSQL, o).invoke();
                    String f = perprocessFilter.getF();
                    String v = perprocessFilter.getV();
                    query.and().field(f).greaterThan(v);
                } else if (">=".equalsIgnoreCase(op)) {
                    PerprocessFilter perprocessFilter = new PerprocessFilter(parseSQL, o).invoke();
                    String f = perprocessFilter.getF();
                    String v = perprocessFilter.getV();
                    query.and().field(f).greaterEqual(v);
                } else if ("<".equalsIgnoreCase(op)) {
                    PerprocessFilter perprocessFilter = new PerprocessFilter(parseSQL, o).invoke();
                    String f = perprocessFilter.getF();
                    String v = perprocessFilter.getV();
                    query.and().field(f).lessThan(v);
                } else if ("<=".equalsIgnoreCase(op)) {
                    PerprocessFilter perprocessFilter = new PerprocessFilter(parseSQL, o).invoke();
                    String f = perprocessFilter.getF();
                    String v = perprocessFilter.getV();
                    query.and().field(f).lessEqual(v);
                } else if ("in".equalsIgnoreCase(op)) {
                    throw new TDHSSQLException("can't support IN in this postion!", parseSQL.getSql());
                } else {
                    throw new TDHSSQLException("error operation!", parseSQL.getSql());
                }

            }
        }

        int limit = parseSQL.getLimit();
        int start = parseSQL.getLimitOffset();
        if (limit < 0 || start < 0) {
            throw new TDHSSQLException("limit can't be negative!", parseSQL.getSql());
        }
        query.limit(start, limit);
        return query;
    }
View Full Code Here

        } else if ("<=".equalsIgnoreCase(firstKeyOper)) {
            where.lessEqual(parseKeys(parseSQL, keys));
        } else if ("in".equalsIgnoreCase(firstKeyOper)) {
            String[] in = StringUtil.escapeIn(keys.get(0).getValue());
            if (in == null || in.length == 0) {
                throw new TDHSSQLException("don't have in values!", parseSQL.getSql());
            }
            String[][] inv = new String[in.length][1];
            int i = 0;
            for (String[] a : inv) {
                a[0] = in[i++];
            }
            where.in(inv);
        } else {
            throw new TDHSSQLException("error operation!", parseSQL.getSql());
        }
    }
View Full Code Here

        String kk[] = new String[keys.size()];
        int i = 0;
        for (OperationStruct os : keys) {
            String s = StringUtil.escapeValue(os.getValue());
            if (s == null) {
                throw new TDHSSQLException("error value in index!", parseSQL.getSql());
            }
            kk[i++] = s;
        }
        return kk;
    }
View Full Code Here

    private void doUpdate(com.taobao.tdhs.client.statement.Statement s, ParseSQL parseSQL, String tableName,
                          String dbName) throws SQLException {
        Query query = preprocessGet(s, parseSQL, tableName, dbName);
        List<Entry<String, String>> updateEntries = parseSQL.getUpdateEntries();
        if (updateEntries == null || updateEntries.isEmpty()) {
            throw new TDHSSQLException("no value to update!", parseSQL.getSql());
        }

        for (Entry<String, String> e : updateEntries) {
            if (StringUtils.isBlank(e.getKey()) || StringUtils.isBlank(e.getValue())) {
                throw new TDHSSQLException("insert column and values can't be empty!", parseSQL.getSql());
            }
            String field = StringUtil.escapeField(StringUtils.trim(e.getKey()));
            if (field == null) {
                throw new TDHSSQLException("insert column is error!", parseSQL.getSql());
            }
            String value = StringUtils.trim(e.getValue());
            if (StringUtils.equalsIgnoreCase("null", value)) {
                query.set().field(field).setNull();
            } else if (StringUtils.equalsIgnoreCase("now()", value)) {
                query.set().field(field).setNow();
            } else {
                if (StringUtils.startsWith(value, field)) {
                    value = value.substring(field.length());
                    value = StringUtils.trim(value);
                    if (StringUtils.startsWith(value, "+")) {
                        value = value.substring(1);
                        value = StringUtils.trim(value);
                        if (StringUtil.isLong(value)) {
                            query.set().field(field).add(Long.valueOf(value));
                        } else {
                            throw new TDHSSQLException("update value is error ,is not long", parseSQL.getSql());
                        }
                    } else if (StringUtils.startsWith(value, "-")) {
                        value = value.substring(1);
                        value = StringUtils.trim(value);
                        if (StringUtil.isLong(value)) {
                            query.set().field(field).sub(Long.valueOf(value));
                        } else {
                            throw new TDHSSQLException("update value is error ,is not long", parseSQL.getSql());
                        }

                    } else {
                        throw new TDHSSQLException("update value is error maybe can't support!", parseSQL.getSql());
                    }
                } else {
                    value = StringUtil.escapeValue(value);
                    if (value == null) {
                        throw new TDHSSQLException("update value is error!", parseSQL.getSql());
                    }

                    if (StringUtils.startsWith(value, BYTE_PARAMETER_PREFIX)) {
                        int pidx =
                                ConvertUtil.safeConvertInt(StringUtils.substring(value, BYTE_PARAMETER_PREFIX.length()),
View Full Code Here

    private void doInsert(com.taobao.tdhs.client.statement.Statement s, ParseSQL parseSQL, String tableName,
                          String dbName) throws SQLException {
        Insert insert = s.insert().use(dbName).from(tableName);
        List<Entry<String, String>> insertEntries = parseSQL.getInsertEntries();
        if (insertEntries == null || insertEntries.isEmpty()) {
            throw new TDHSSQLException("no value to insert!", parseSQL.getSql());
        }
        for (Entry<String, String> e : insertEntries) {
            if (StringUtils.isBlank(e.getKey()) || StringUtils.isBlank(e.getValue())) {
                throw new TDHSSQLException("insert column and values can't be empty!", parseSQL.getSql());
            }
            String field = StringUtil.escapeField(StringUtils.trim(e.getKey()));
            if (field == null) {
                throw new TDHSSQLException("insert column is error!", parseSQL.getSql());
            }
            String value = StringUtils.trim(e.getValue());
            if (StringUtils.equalsIgnoreCase("null", value)) {
                insert.valueSetNull(field);
            } else if (StringUtils.equalsIgnoreCase("now()", value)) {
                insert.valueSetNow(field);
            } else {
                value = StringUtil.escapeValue(value);
                if (value == null) {
                    throw new TDHSSQLException("insert value is error!", parseSQL.getSql());
                }
                if (StringUtils.startsWith(value, BYTE_PARAMETER_PREFIX)) {
                    int pidx = ConvertUtil.safeConvertInt(StringUtils.substring(value, BYTE_PARAMETER_PREFIX.length()),
                            -1);
                    if (byteParameters.containsKey(pidx)) {
View Full Code Here

        PreproccessSQL preproccessSQL = new PreproccessSQL(sql).invoke();
        ParseSQL parseSQL = preproccessSQL.getParseSQL();
        String tableName = preproccessSQL.getTableName();
        String dbName = preproccessSQL.getDbName();
        if (getConnection().isReadOnly() && !SQLType.SELECT.equals(parseSQL.getSqlType())) {
            throw new TDHSSQLException("It is readonly, can't executeSelect " + parseSQL.getSqlType().toString() + " !",
                    sql);
        }
        com.taobao.tdhs.client.statement.Statement s;
        HintStruct hint = parseSQL.getHint();
        if (hint != null && StringUtils.isBlank(hint.getErrmsg())) {
            s = client.createStatement(hint.getHash());
        } else {
            s = client;
        }

        switch (parseSQL.getSqlType()) {
            case INSERT:
                doInsert(s, parseSQL, tableName, dbName);
                return false;
            case UPDATE:
                doUpdate(s, parseSQL, tableName, dbName);
                return false;
            case DELETE:
                doDelete(s, parseSQL, tableName, dbName);
                return false;
            case SELECT:
                doSelectOrCount(s, parseSQL, tableName, dbName);
                return true;
            default:
                throw new TDHSSQLException("can't parse this SQL!", sql);
        }
    }
View Full Code Here

                break;
            case DELETE:
                doDelete(batchStatement, parseSQL, tableName, dbName);
                break;
            case SELECT:
                throw new TDHSSQLException("add batch not support select!", sql);
            default:
                throw new TDHSSQLException("can't parse this SQL!", sql);
        }
    }
View Full Code Here

        public PreproccessSQL invoke() throws SQLException {
            parseSQL = parseSQL(sql);
            tableName = StringUtil.escapeField(parseSQL.getTableName());
            if (tableName == null) {
                throw new TDHSSQLException("can't parse table name!", sql);
            }
            dbName = db;
            if (StringUtils.contains(tableName, ".")) {
                String[] strings = StringUtils.split(tableName, ".");
                if (strings.length == 2) {
                    dbName = strings[0];
                    tableName = strings[1];
                } else if (strings.length == 1) {
                    tableName = strings[0];
                } else {
                    throw new TDHSSQLException("can't parse table!", sql);
                }
            }
            if (StringUtils.isBlank(dbName) || StringUtils.isBlank(tableName)) {
                throw new TDHSSQLException("can't parse table!", sql);
            }
            return this;
        }
View Full Code Here

TOP

Related Classes of com.taobao.tdhs.jdbc.exception.TDHSSQLException

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.