001/*
002 *  Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com).
003 *  <p>
004 *  Licensed under the Apache License, Version 2.0 (the "License");
005 *  you may not use this file except in compliance with the License.
006 *  You may obtain a copy of the License at
007 *  <p>
008 *  http://www.apache.org/licenses/LICENSE-2.0
009 *  <p>
010 *  Unless required by applicable law or agreed to in writing, software
011 *  distributed under the License is distributed on an "AS IS" BASIS,
012 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 *  See the License for the specific language governing permissions and
014 *  limitations under the License.
015 */
016package com.mybatisflex.core.query;
017
018import com.mybatisflex.core.dialect.IDialect;
019import com.mybatisflex.core.util.CollectionUtil;
020import com.mybatisflex.core.util.StringUtil;
021
022import java.util.List;
023import java.util.Map;
024
025/**
026 * Cross Package Invoke
027 * 跨包调用工具类,这么设计的原因,是需要保证 QueryWrapper 方法对于用户的纯净性
028 * 而 framework 又可以通过 CPI 来调用 QueryWrapper 的其他方法
029 */
030
031public class CPI {
032
033    private CPI() {
034    }
035
036    public static Object[] getValueArray(QueryWrapper queryWrapper) {
037        return queryWrapper.getValueArray();
038    }
039
040    public static List<QueryWrapper> getChildSelect(QueryWrapper queryWrapper) {
041        return queryWrapper.getChildSelect();
042    }
043
044
045    public static With getWith(QueryWrapper queryWrapper) {
046        return queryWrapper.with;
047    }
048
049    public static List<QueryTable> getQueryTables(QueryWrapper queryWrapper) {
050        return queryWrapper.getQueryTables();
051    }
052
053    public static void setQueryTable(QueryWrapper queryWrapper, List<QueryTable> queryTables) {
054        queryWrapper.setQueryTables(queryTables);
055    }
056
057    public static String getDataSource(QueryWrapper queryWrapper) {
058        return queryWrapper.getDataSource();
059    }
060
061    public static void setDataSource(QueryWrapper queryWrapper, String datasource) {
062        queryWrapper.setDataSource(datasource);
063    }
064
065    public static String getHint(QueryWrapper queryWrapper) {
066        return queryWrapper.getHint();
067    }
068
069    public static void setHint(QueryWrapper queryWrapper, String hint) {
070        queryWrapper.setHint(hint);
071    }
072
073    public static List<QueryColumn> getSelectColumns(QueryWrapper queryWrapper) {
074        return queryWrapper.getSelectColumns();
075    }
076
077    public static void setSelectColumns(QueryWrapper queryWrapper, List<QueryColumn> selectColumns) {
078        queryWrapper.setSelectColumns(selectColumns);
079    }
080
081    public static void setSelectColumnsIfNecessary(QueryWrapper queryWrapper, List<QueryColumn> selectColumns) {
082        if (CollectionUtil.isEmpty(queryWrapper.getSelectColumns())
083            && CollectionUtil.isNotEmpty(selectColumns)
084            && CollectionUtil.isEmpty(CPI.getJoinTables(queryWrapper))
085        ) {
086            queryWrapper.setSelectColumns(selectColumns);
087        }
088    }
089
090    public static List<Join> getJoins(QueryWrapper queryWrapper) {
091        return queryWrapper.getJoins();
092    }
093
094    public static void setJoins(QueryWrapper queryWrapper, List<Join> joins) {
095        queryWrapper.setJoins(joins);
096    }
097
098    public static String getJoinType(Join join) {
099        return join.type;
100    }
101
102    public static QueryTable getJoinQueryTable(Join join) {
103        return join.getQueryTable();
104    }
105
106    public static QueryCondition getJoinQueryCondition(Join join) {
107        return join.on;
108    }
109
110    public static void setJoinQueryCondition(Join join, QueryCondition queryCondition) {
111        join.on = queryCondition;
112    }
113
114
115    public static List<QueryTable> getJoinTables(QueryWrapper queryWrapper) {
116        return queryWrapper.getJoinTables();
117    }
118
119    public static void setJoinTables(QueryWrapper queryWrapper, List<QueryTable> joinTables) {
120        queryWrapper.setJoinTables(joinTables);
121    }
122
123
124    public static QueryCondition getWhereQueryCondition(QueryWrapper queryWrapper) {
125        return queryWrapper.getWhereQueryCondition();
126    }
127
128    public static List<QueryColumn> getGroupByColumns(QueryWrapper queryWrapper) {
129        return queryWrapper.getGroupByColumns();
130    }
131
132    public static void setGroupByColumns(QueryWrapper queryWrapper, List<QueryColumn> groupByColumns) {
133        queryWrapper.setGroupByColumns(groupByColumns);
134    }
135
136    public static QueryCondition getHavingQueryCondition(QueryWrapper queryWrapper) {
137        return queryWrapper.getHavingQueryCondition();
138    }
139
140    public static void setHavingQueryCondition(QueryWrapper queryWrapper, QueryCondition havingQueryCondition) {
141        queryWrapper.setHavingQueryCondition(havingQueryCondition);
142    }
143
144    public static List<QueryOrderBy> getOrderBys(QueryWrapper queryWrapper) {
145        return queryWrapper.getOrderBys();
146    }
147
148    public static void setOrderBys(QueryWrapper queryWrapper, List<QueryOrderBy> orderBys) {
149        queryWrapper.setOrderBys(orderBys);
150    }
151
152    public static List<UnionWrapper> getUnions(QueryWrapper queryWrapper) {
153        return queryWrapper.getUnions();
154    }
155
156    public static void setUnions(QueryWrapper queryWrapper, List<UnionWrapper> unions) {
157        queryWrapper.setUnions(unions);
158    }
159
160
161    public static Integer getLimitOffset(QueryWrapper queryWrapper) {
162        return queryWrapper.getLimitOffset();
163    }
164
165    public static void setLimitOffset(QueryWrapper queryWrapper, Integer limitOffset) {
166        queryWrapper.setLimitOffset(limitOffset);
167    }
168
169    public static Integer getLimitRows(QueryWrapper queryWrapper) {
170        return queryWrapper.getLimitRows();
171    }
172
173    public static void setLimitRows(QueryWrapper queryWrapper, Integer limitRows) {
174        queryWrapper.setLimitRows(limitRows);
175    }
176
177    public static List<String> getEndFragments(QueryWrapper queryWrapper) {
178        return queryWrapper.getEndFragments();
179    }
180
181    public static void setEndFragments(QueryWrapper queryWrapper, List<String> endFragments) {
182        queryWrapper.setEndFragments(endFragments);
183    }
184
185
186    public static Map<String, Object> getContext(QueryWrapper queryWrapper) {
187        return queryWrapper.getContext();
188    }
189
190    public static void setContext(QueryWrapper queryWrapper, Map<String, Object> context) {
191        queryWrapper.setContext(context);
192    }
193
194    public static void putContext(QueryWrapper queryWrapper, String key, Object value) {
195        queryWrapper.putContext(key, value);
196    }
197
198
199    public static <R> R getContext(QueryWrapper queryWrapper, String key) {
200        return queryWrapper.getContext(key);
201    }
202
203
204    public static String toConditionSql(QueryColumn queryColumn, List<QueryTable> queryTables, IDialect dialect) {
205        return queryColumn.toConditionSql(queryTables, dialect);
206    }
207
208    public static String toSelectSql(QueryColumn queryColumn, List<QueryTable> queryTables, IDialect dialect) {
209        return queryColumn.toSelectSql(queryTables, dialect);
210    }
211
212    public static void setFromIfNecessary(QueryWrapper queryWrapper, String tableName) {
213        if (StringUtil.isNotBlank(tableName)
214            && CollectionUtil.isEmpty(queryWrapper.getQueryTables())) {
215            queryWrapper.from(tableName);
216        }
217    }
218
219    public static void setFromIfNecessary(QueryWrapper queryWrapper, String schema, String tableName) {
220        if (StringUtil.isNotBlank(tableName)
221            && CollectionUtil.isEmpty(queryWrapper.getQueryTables())) {
222            queryWrapper.from(new QueryTable(schema, tableName));
223        }
224    }
225
226    public static boolean containsTable(QueryCondition condition, String... tables) {
227        return condition != null && condition.containsTable(tables);
228    }
229
230    public static QueryWrapper getQueryWrapper(SelectQueryColumn selectQueryColumn) {
231        return selectQueryColumn.getQueryWrapper();
232    }
233
234    public static boolean isSameTable(QueryTable queryTable, QueryTable otherTable) {
235        return queryTable.isSameTable(otherTable);
236    }
237
238}