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.constant.SqlConnector; 019import com.mybatisflex.core.dialect.IDialect; 020import com.mybatisflex.core.util.CollectionUtil; 021import com.mybatisflex.core.util.StringUtil; 022 023import java.util.List; 024import java.util.Map; 025 026/** 027 * Cross Package Invoke 028 * 跨包调用工具类,这么设计的原因,是需要保证 QueryWrapper 方法对于用户的纯净性 029 * 而 framework 又可以通过 CPI 来调用 QueryWrapper 的其他方法 030 */ 031 032public class CPI { 033 034 private CPI() { 035 } 036 037 public static Object[] getValueArray(QueryWrapper queryWrapper) { 038 return queryWrapper.getAllValueArray(); 039 } 040 041 public static Object[] getJoinValueArray(QueryWrapper queryWrapper) { 042 return queryWrapper.getJoinValueArray(); 043 } 044 045 public static Object[] getConditionValueArray(QueryWrapper queryWrapper) { 046 return queryWrapper.getConditionValueArray(); 047 } 048 049 public static List<QueryWrapper> getChildSelect(QueryWrapper queryWrapper) { 050 return queryWrapper.getChildSelect(); 051 } 052 053 054 public static With getWith(QueryWrapper queryWrapper) { 055 return queryWrapper.with; 056 } 057 058 public static List<QueryTable> getQueryTables(QueryWrapper queryWrapper) { 059 return queryWrapper.getQueryTables(); 060 } 061 062 public static void setQueryTable(QueryWrapper queryWrapper, List<QueryTable> queryTables) { 063 queryWrapper.setQueryTables(queryTables); 064 } 065 066 public static String getDataSource(QueryWrapper queryWrapper) { 067 return queryWrapper.getDataSource(); 068 } 069 070 public static void setDataSource(QueryWrapper queryWrapper, String datasource) { 071 queryWrapper.setDataSource(datasource); 072 } 073 074 public static String getHint(QueryWrapper queryWrapper) { 075 return queryWrapper.getHint(); 076 } 077 078 public static void setHint(QueryWrapper queryWrapper, String hint) { 079 queryWrapper.setHint(hint); 080 } 081 082 public static List<QueryColumn> getSelectColumns(QueryWrapper queryWrapper) { 083 return queryWrapper.getSelectColumns(); 084 } 085 086 public static void setSelectColumns(QueryWrapper queryWrapper, List<QueryColumn> selectColumns) { 087 queryWrapper.setSelectColumns(selectColumns); 088 } 089 090 public static void setSelectColumnsIfNecessary(QueryWrapper queryWrapper, List<QueryColumn> selectColumns) { 091 if (CollectionUtil.isEmpty(queryWrapper.getSelectColumns()) 092 && CollectionUtil.isNotEmpty(selectColumns) 093 && CollectionUtil.isEmpty(CPI.getJoinTables(queryWrapper)) 094 ) { 095 queryWrapper.setSelectColumns(selectColumns); 096 } 097 } 098 099 public static List<Join> getJoins(QueryWrapper queryWrapper) { 100 return queryWrapper.getJoins(); 101 } 102 103 public static void setJoins(QueryWrapper queryWrapper, List<Join> joins) { 104 queryWrapper.setJoins(joins); 105 } 106 107 public static String getJoinType(Join join) { 108 return join.type; 109 } 110 111 public static QueryTable getJoinQueryTable(Join join) { 112 return join.getQueryTable(); 113 } 114 115 public static QueryCondition getJoinQueryCondition(Join join) { 116 return join.on; 117 } 118 119 public static void setJoinQueryCondition(Join join, QueryCondition queryCondition) { 120 join.on = queryCondition; 121 } 122 123 124 public static List<QueryTable> getJoinTables(QueryWrapper queryWrapper) { 125 return queryWrapper.getJoinTables(); 126 } 127 128 public static void setJoinTables(QueryWrapper queryWrapper, List<QueryTable> joinTables) { 129 queryWrapper.setJoinTables(joinTables); 130 } 131 132 public static void addJoin(QueryWrapper queryWrapper, Join join) { 133 queryWrapper.addJoinTable(join.getQueryTable()); 134 queryWrapper.addJoin(join); 135 } 136 137 public static QueryCondition getPrevEffectiveCondition(QueryCondition queryCondition) { 138 return queryCondition.getPrevEffectiveCondition(); 139 } 140 141 public static QueryCondition getNextCondition(QueryCondition queryCondition) { 142 return queryCondition.getNextEffectiveCondition(); 143 } 144 145 public static QueryCondition getWhereQueryCondition(QueryWrapper queryWrapper) { 146 return queryWrapper.getWhereQueryCondition(); 147 } 148 149 public static void setWhereQueryCondition(QueryWrapper queryWrapper, QueryCondition queryCondition) { 150 queryWrapper.setWhereQueryCondition(queryCondition); 151 } 152 153 public static void addWhereQueryCondition(QueryWrapper queryWrapper, QueryCondition queryCondition, SqlConnector connector) { 154 queryWrapper.addWhereQueryCondition(queryCondition, connector); 155 } 156 157 public static List<QueryColumn> getGroupByColumns(QueryWrapper queryWrapper) { 158 return queryWrapper.getGroupByColumns(); 159 } 160 161 public static void setGroupByColumns(QueryWrapper queryWrapper, List<QueryColumn> groupByColumns) { 162 queryWrapper.setGroupByColumns(groupByColumns); 163 } 164 165 public static QueryCondition getHavingQueryCondition(QueryWrapper queryWrapper) { 166 return queryWrapper.getHavingQueryCondition(); 167 } 168 169 public static void setHavingQueryCondition(QueryWrapper queryWrapper, QueryCondition havingQueryCondition) { 170 queryWrapper.setHavingQueryCondition(havingQueryCondition); 171 } 172 173 public static List<QueryOrderBy> getOrderBys(QueryWrapper queryWrapper) { 174 return queryWrapper.getOrderBys(); 175 } 176 177 public static void setOrderBys(QueryWrapper queryWrapper, List<QueryOrderBy> orderBys) { 178 queryWrapper.setOrderBys(orderBys); 179 } 180 181 public static List<UnionWrapper> getUnions(QueryWrapper queryWrapper) { 182 return queryWrapper.getUnions(); 183 } 184 185 public static void setUnions(QueryWrapper queryWrapper, List<UnionWrapper> unions) { 186 queryWrapper.setUnions(unions); 187 } 188 189 190 public static Long getLimitOffset(QueryWrapper queryWrapper) { 191 return queryWrapper.getLimitOffset(); 192 } 193 194 public static void setLimitOffset(QueryWrapper queryWrapper, Long limitOffset) { 195 queryWrapper.setLimitOffset(limitOffset); 196 } 197 198 public static Long getLimitRows(QueryWrapper queryWrapper) { 199 return queryWrapper.getLimitRows(); 200 } 201 202 public static void setLimitRows(QueryWrapper queryWrapper, Long limitRows) { 203 queryWrapper.setLimitRows(limitRows); 204 } 205 206 public static List<String> getEndFragments(QueryWrapper queryWrapper) { 207 return queryWrapper.getEndFragments(); 208 } 209 210 public static void setEndFragments(QueryWrapper queryWrapper, List<String> endFragments) { 211 queryWrapper.setEndFragments(endFragments); 212 } 213 214 215 public static Map<String, Object> getContext(QueryWrapper queryWrapper) { 216 return queryWrapper.getContext(); 217 } 218 219 public static void setContext(QueryWrapper queryWrapper, Map<String, Object> context) { 220 queryWrapper.setContext(context); 221 } 222 223 public static void putContext(QueryWrapper queryWrapper, String key, Object value) { 224 queryWrapper.putContext(key, value); 225 } 226 227 228 public static <R> R getContext(QueryWrapper queryWrapper, String key) { 229 return queryWrapper.getContext(key); 230 } 231 232 233 public static String toConditionSql(QueryColumn queryColumn, List<QueryTable> queryTables, IDialect dialect) { 234 return queryColumn.toConditionSql(queryTables, dialect); 235 } 236 237 public static String toSelectSql(QueryColumn queryColumn, List<QueryTable> queryTables, IDialect dialect) { 238 return queryColumn.toSelectSql(queryTables, dialect); 239 } 240 241 public static void setFromIfNecessary(QueryWrapper queryWrapper, String tableName) { 242 if (StringUtil.isNotBlank(tableName) 243 && CollectionUtil.isEmpty(queryWrapper.getQueryTables())) { 244 queryWrapper.from(tableName); 245 } 246 } 247 248 public static void setFromIfNecessary(QueryWrapper queryWrapper, String schema, String tableName) { 249 if (StringUtil.isNotBlank(tableName) 250 && CollectionUtil.isEmpty(queryWrapper.getQueryTables())) { 251 queryWrapper.from(new QueryTable(schema, tableName)); 252 } 253 } 254 255 public static boolean containsTable(QueryCondition condition, String... tables) { 256 return condition != null && condition.containsTable(tables); 257 } 258 259 public static QueryWrapper getQueryWrapper(SelectQueryColumn selectQueryColumn) { 260 return selectQueryColumn.getQueryWrapper(); 261 } 262 263 public static boolean isSameTable(QueryTable queryTable, QueryTable otherTable) { 264 return queryTable.isSameTable(otherTable); 265 } 266 267}