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
034    public static Object[] getValueArray(QueryWrapper queryWrapper) {
035        return queryWrapper.getValueArray();
036    }
037
038    public static List<QueryWrapper> getChildSelect(QueryWrapper queryWrapper) {
039        return queryWrapper.getChildSelect();
040    }
041
042    public static List<QueryTable> getQueryTables(QueryWrapper queryWrapper) {
043        return queryWrapper.getQueryTables();
044    }
045
046    public static void setQueryTable(QueryWrapper queryWrapper, List<QueryTable> queryTables) {
047        queryWrapper.setQueryTables(queryTables);
048    }
049
050    public static String getDataSource(QueryWrapper queryWrapper) {
051        return queryWrapper.getDataSource();
052    }
053
054    public static void setDataSource(QueryWrapper queryWrapper, String datasource) {
055        queryWrapper.setDataSource(datasource);
056    }
057
058    public static List<QueryColumn> getSelectColumns(QueryWrapper queryWrapper) {
059        return queryWrapper.getSelectColumns();
060    }
061
062    public static void setSelectColumns(QueryWrapper queryWrapper, List<QueryColumn> selectColumns) {
063        queryWrapper.setSelectColumns(selectColumns);
064    }
065
066    public static void setSelectColumnsIfNecessary(QueryWrapper queryWrapper, List<QueryColumn> selectColumns) {
067        if (CollectionUtil.isEmpty(queryWrapper.getSelectColumns())
068                && CollectionUtil.isNotEmpty(selectColumns)
069                && CollectionUtil.isEmpty(CPI.getJoinTables(queryWrapper))
070        ) {
071            queryWrapper.setSelectColumns(selectColumns);
072        }
073    }
074
075    public static List<Join> getJoins(QueryWrapper queryWrapper) {
076        return queryWrapper.getJoins();
077    }
078
079    public static void setJoins(QueryWrapper queryWrapper, List<Join> joins) {
080        queryWrapper.setJoins(joins);
081    }
082
083
084    public static List<QueryTable> getJoinTables(QueryWrapper queryWrapper) {
085        return queryWrapper.getJoinTables();
086    }
087
088    public static void setJoinTables(QueryWrapper queryWrapper, List<QueryTable> joinTables) {
089        queryWrapper.setJoinTables(joinTables);
090    }
091
092
093    public static QueryCondition getWhereQueryCondition(QueryWrapper queryWrapper) {
094        return queryWrapper.getWhereQueryCondition();
095    }
096
097    public static List<QueryColumn> getGroupByColumns(QueryWrapper queryWrapper) {
098        return queryWrapper.getGroupByColumns();
099    }
100
101    public static void setGroupByColumns(QueryWrapper queryWrapper, List<QueryColumn> groupByColumns) {
102        queryWrapper.setGroupByColumns(groupByColumns);
103    }
104
105    public static QueryCondition getHavingQueryCondition(QueryWrapper queryWrapper) {
106        return queryWrapper.getHavingQueryCondition();
107    }
108
109    public static void setHavingQueryCondition(QueryWrapper queryWrapper, QueryCondition havingQueryCondition) {
110        queryWrapper.setHavingQueryCondition(havingQueryCondition);
111    }
112
113    public static List<QueryOrderBy> getOrderBys(QueryWrapper queryWrapper) {
114        return queryWrapper.getOrderBys();
115    }
116
117    public static void setOrderBys(QueryWrapper queryWrapper, List<QueryOrderBy> orderBys) {
118        queryWrapper.setOrderBys(orderBys);
119    }
120
121    public static List<UnionWrapper> getUnions(QueryWrapper queryWrapper) {
122        return queryWrapper.getUnions();
123    }
124
125    public static void setUnions(QueryWrapper queryWrapper, List<UnionWrapper> unions) {
126        queryWrapper.setUnions(unions);
127    }
128
129
130    public static Integer getLimitOffset(QueryWrapper queryWrapper) {
131        return queryWrapper.getLimitOffset();
132    }
133
134    public static void setLimitOffset(QueryWrapper queryWrapper, Integer limitOffset) {
135        queryWrapper.setLimitOffset(limitOffset);
136    }
137
138    public static Integer getLimitRows(QueryWrapper queryWrapper) {
139        return queryWrapper.getLimitRows();
140    }
141
142    public static void setLimitRows(QueryWrapper queryWrapper, Integer limitRows) {
143        queryWrapper.setLimitRows(limitRows);
144    }
145
146    public static Map<String, Object> getContext(QueryWrapper queryWrapper) {
147        return queryWrapper.getContext();
148    }
149
150    public static void setContext(QueryWrapper queryWrapper, Map<String, Object> context) {
151        queryWrapper.setContext(context);
152    }
153
154    public static void putContext(QueryWrapper queryWrapper, String key, Object value) {
155        queryWrapper.putContext(key, value);
156    }
157
158
159    public static <R> R getContext(QueryWrapper queryWrapper, String key) {
160        return queryWrapper.getContext(key);
161    }
162
163
164    public static String toConditionSql(QueryColumn queryColumn, List<QueryTable> queryTables, IDialect dialect) {
165        return queryColumn.toConditionSql(queryTables, dialect);
166    }
167
168    public static String toSelectSql(QueryColumn queryColumn, List<QueryTable> queryTables, IDialect dialect) {
169        return queryColumn.toSelectSql(queryTables, dialect);
170    }
171
172    public static void setFromIfNecessary(QueryWrapper queryWrapper, String tableName) {
173        if (StringUtil.isNotBlank(tableName)
174                && CollectionUtil.isEmpty(queryWrapper.getQueryTables())) {
175            queryWrapper.from(tableName);
176        }
177    }
178}