All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.javaclub.cdl.client.matrix.parser.SQLVisitorRegistry Maven / Gradle / Ivy

The newest version!
/**
 * Copyright 1999-2015 dangdang.com.
 * 

* Licensed 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 com.github.javaclub.cdl.client.matrix.parser; import java.util.HashMap; import java.util.Map; import lombok.AccessLevel; import lombok.NoArgsConstructor; import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor; import com.github.javaclub.cdl.client.matrix.exception.DatabaseTypeUnsupportedException; import com.github.javaclub.cdl.client.matrix.jdbc.DatabaseType; import com.github.javaclub.cdl.client.matrix.parser.visitor.bash.mysql.MySQLDeleteVisitor; import com.github.javaclub.cdl.client.matrix.parser.visitor.bash.mysql.MySQLInsertVisitor; import com.github.javaclub.cdl.client.matrix.parser.visitor.bash.mysql.MySQLReplaceVisitor; import com.github.javaclub.cdl.client.matrix.parser.visitor.bash.mysql.MySQLSelectVisitor; import com.github.javaclub.cdl.client.matrix.parser.visitor.bash.mysql.MySQLUpdateVisitor; /** * SQL访问器注册表. * * @author zhangliang */ @NoArgsConstructor(access = AccessLevel.PRIVATE) public final class SQLVisitorRegistry { private static final Map> SELECT_REGISTRY = new HashMap<>(DatabaseType.values().length); private static final Map> INSERT_REGISTRY = new HashMap<>(DatabaseType.values().length); private static final Map> UPDATE_REGISTRY = new HashMap<>(DatabaseType.values().length); private static final Map> DELETE_REGISTRY = new HashMap<>(DatabaseType.values().length); private static final Map> REPLACE_REGISTRY = new HashMap<>(DatabaseType.values().length); static { registerSelectVistor(); registerInsertVistor(); registerUpdateVistor(); registerDeleteVistor(); registerReplaceVistor(); } private static void registerSelectVistor() { SELECT_REGISTRY.put(DatabaseType.H2, MySQLSelectVisitor.class); SELECT_REGISTRY.put(DatabaseType.MySQL, MySQLSelectVisitor.class); // TODO 其他数据库 } private static void registerInsertVistor() { INSERT_REGISTRY.put(DatabaseType.H2, MySQLInsertVisitor.class); INSERT_REGISTRY.put(DatabaseType.MySQL, MySQLInsertVisitor.class); // TODO 其他数据库 } private static void registerUpdateVistor() { UPDATE_REGISTRY.put(DatabaseType.H2, MySQLUpdateVisitor.class); UPDATE_REGISTRY.put(DatabaseType.MySQL, MySQLUpdateVisitor.class); // TODO 其他数据库 } private static void registerDeleteVistor() { DELETE_REGISTRY.put(DatabaseType.H2, MySQLDeleteVisitor.class); DELETE_REGISTRY.put(DatabaseType.MySQL, MySQLDeleteVisitor.class); // TODO 其他数据库 } private static void registerReplaceVistor() { REPLACE_REGISTRY.put(DatabaseType.H2, MySQLReplaceVisitor.class); REPLACE_REGISTRY.put(DatabaseType.MySQL, MySQLReplaceVisitor.class); // TODO 其他数据库 } /** * 获取SELECT访问器. * * @param databaseType 数据库类型 * @return SELECT访问器 */ public static Class getSelectVistor(final DatabaseType databaseType) { return getVistor(databaseType, SELECT_REGISTRY); } /** * 获取INSERT访问器. * * @param databaseType 数据库类型 * @return INSERT访问器 */ public static Class getInsertVistor(final DatabaseType databaseType) { return getVistor(databaseType, INSERT_REGISTRY); } /** * 获取UPDATE访问器. * * @param databaseType 数据库类型 * @return UPDATE访问器 */ public static Class getUpdateVistor(final DatabaseType databaseType) { return getVistor(databaseType, UPDATE_REGISTRY); } /** * 获取DELETE访问器. * * @param databaseType 数据库类型 * @return DELETE访问器 */ public static Class getDeleteVistor(final DatabaseType databaseType) { return getVistor(databaseType, DELETE_REGISTRY); } public static Class getReplaceVistor(final DatabaseType databaseType) { return getVistor(databaseType, REPLACE_REGISTRY); } private static Class getVistor(final DatabaseType databaseType, final Map> registry) { if (!registry.containsKey(databaseType)) { throw new DatabaseTypeUnsupportedException(databaseType.name()); } return registry.get(databaseType); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy