001/* 002 * Copyright (c) 2022-2025, 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 Object[] getConditionParams(QueryCondition queryCondition) { 050 return WrapperUtil.getValues(queryCondition); 051 } 052 053 public static List<QueryWrapper> getChildSelect(QueryWrapper queryWrapper) { 054 return queryWrapper.getChildSelect(); 055 } 056 057 058 public static With getWith(QueryWrapper queryWrapper) { 059 return queryWrapper.with; 060 } 061 062 public static List<QueryTable> getQueryTables(QueryWrapper queryWrapper) { 063 return queryWrapper.getQueryTables(); 064 } 065 066 public static void setQueryTable(QueryWrapper queryWrapper, List<QueryTable> queryTables) { 067 queryWrapper.setQueryTables(queryTables); 068 } 069 070 public static String getDataSource(QueryWrapper queryWrapper) { 071 return queryWrapper.getDataSource(); 072 } 073 074 public static void setDataSource(QueryWrapper queryWrapper, String datasource) { 075 queryWrapper.setDataSource(datasource); 076 } 077 078 public static String getHint(QueryWrapper queryWrapper) { 079 return queryWrapper.getHint(); 080 } 081 082 public static void setHint(QueryWrapper queryWrapper, String hint) { 083 queryWrapper.setHint(hint); 084 } 085 086 public static List<QueryColumn> getSelectColumns(QueryWrapper queryWrapper) { 087 return queryWrapper.getSelectColumns(); 088 } 089 090 public static void setSelectColumns(QueryWrapper queryWrapper, List<QueryColumn> selectColumns) { 091 queryWrapper.setSelectColumns(selectColumns); 092 } 093 094 public static void setSelectColumnsIfNecessary(QueryWrapper queryWrapper, List<QueryColumn> selectColumns) { 095 if (CollectionUtil.isEmpty(queryWrapper.getSelectColumns()) 096 && CollectionUtil.isNotEmpty(selectColumns) 097 && CollectionUtil.isEmpty(CPI.getJoinTables(queryWrapper)) 098 ) { 099 queryWrapper.setSelectColumns(selectColumns); 100 } 101 } 102 103 public static List<Join> getJoins(QueryWrapper queryWrapper) { 104 return queryWrapper.getJoins(); 105 } 106 107 public static void setJoins(QueryWrapper queryWrapper, List<Join> joins) { 108 queryWrapper.setJoins(joins); 109 } 110 111 public static String getJoinType(Join join) { 112 return join.type; 113 } 114 115 public static QueryTable getJoinQueryTable(Join join) { 116 return join.getQueryTable(); 117 } 118 119 public static QueryCondition getJoinQueryCondition(Join join) { 120 return join.on; 121 } 122 123 public static void setJoinQueryCondition(Join join, QueryCondition queryCondition) { 124 join.on = queryCondition; 125 } 126 127 128 public static List<QueryTable> getJoinTables(QueryWrapper queryWrapper) { 129 return queryWrapper.getJoinTables(); 130 } 131 132 public static void setJoinTables(QueryWrapper queryWrapper, List<QueryTable> joinTables) { 133 queryWrapper.setJoinTables(joinTables); 134 } 135 136 public static void addJoin(QueryWrapper queryWrapper, Join join) { 137 queryWrapper.addJoinTable(join.getQueryTable()); 138 queryWrapper.addJoin(join); 139 } 140 141 public static QueryCondition getPrevEffectiveCondition(QueryCondition queryCondition) { 142 return queryCondition.getPrevEffectiveCondition(); 143 } 144 145 public static QueryCondition getNextCondition(QueryCondition queryCondition) { 146 return queryCondition.getNextEffectiveCondition(); 147 } 148 149 public static QueryCondition getWhereQueryCondition(QueryWrapper queryWrapper) { 150 return queryWrapper.getWhereQueryCondition(); 151 } 152 public static void setWhereQueryCondition(QueryWrapper queryWrapper, QueryCondition queryCondition) { 153 queryWrapper.setWhereQueryCondition(queryCondition); 154 } 155 public static void addWhereQueryCondition(QueryWrapper queryWrapper, QueryCondition queryCondition) { 156 queryWrapper.addWhereQueryCondition(queryCondition); 157 } 158 159 public static void addWhereQueryCondition(QueryWrapper queryWrapper, QueryCondition queryCondition, SqlConnector connector) { 160 queryWrapper.addWhereQueryCondition(queryCondition, connector); 161 } 162 163 public static List<QueryColumn> getGroupByColumns(QueryWrapper queryWrapper) { 164 return queryWrapper.getGroupByColumns(); 165 } 166 167 public static void setGroupByColumns(QueryWrapper queryWrapper, List<QueryColumn> groupByColumns) { 168 queryWrapper.setGroupByColumns(groupByColumns); 169 } 170 171 public static QueryCondition getHavingQueryCondition(QueryWrapper queryWrapper) { 172 return queryWrapper.getHavingQueryCondition(); 173 } 174 175 public static void setHavingQueryCondition(QueryWrapper queryWrapper, QueryCondition havingQueryCondition) { 176 queryWrapper.setHavingQueryCondition(havingQueryCondition); 177 } 178 179 public static List<QueryOrderBy> getOrderBys(QueryWrapper queryWrapper) { 180 return queryWrapper.getOrderBys(); 181 } 182 183 public static void setOrderBys(QueryWrapper queryWrapper, List<QueryOrderBy> orderBys) { 184 queryWrapper.setOrderBys(orderBys); 185 } 186 187 public static List<UnionWrapper> getUnions(QueryWrapper queryWrapper) { 188 return queryWrapper.getUnions(); 189 } 190 191 public static void setUnions(QueryWrapper queryWrapper, List<UnionWrapper> unions) { 192 queryWrapper.setUnions(unions); 193 } 194 195 196 public static Long getLimitOffset(QueryWrapper queryWrapper) { 197 return queryWrapper.getLimitOffset(); 198 } 199 200 public static void setLimitOffset(QueryWrapper queryWrapper, Long limitOffset) { 201 queryWrapper.setLimitOffset(limitOffset); 202 } 203 204 public static Long getLimitRows(QueryWrapper queryWrapper) { 205 return queryWrapper.getLimitRows(); 206 } 207 208 public static void setLimitRows(QueryWrapper queryWrapper, Long limitRows) { 209 queryWrapper.setLimitRows(limitRows); 210 } 211 212 public static List<String> getEndFragments(QueryWrapper queryWrapper) { 213 return queryWrapper.getEndFragments(); 214 } 215 216 public static void setEndFragments(QueryWrapper queryWrapper, List<String> endFragments) { 217 queryWrapper.setEndFragments(endFragments); 218 } 219 220 221 public static Map<String, Object> getContext(QueryWrapper queryWrapper) { 222 return queryWrapper.getContext(); 223 } 224 225 public static void setContext(QueryWrapper queryWrapper, Map<String, Object> context) { 226 queryWrapper.setContext(context); 227 } 228 229 public static void putContext(QueryWrapper queryWrapper, String key, Object value) { 230 queryWrapper.putContext(key, value); 231 } 232 233 234 public static <R> R getContext(QueryWrapper queryWrapper, String key) { 235 return queryWrapper.getContext(key); 236 } 237 238 239 public static String toConditionSql(QueryColumn queryColumn, List<QueryTable> queryTables, IDialect dialect) { 240 return queryColumn.toConditionSql(queryTables, dialect); 241 } 242 243 public static String toSelectSql(QueryColumn queryColumn, List<QueryTable> queryTables, IDialect dialect) { 244 return queryColumn.toSelectSql(queryTables, dialect); 245 } 246 247 public static void setFromIfNecessary(QueryWrapper queryWrapper, String tableName) { 248 if (StringUtil.hasText(tableName) 249 && CollectionUtil.isEmpty(queryWrapper.getQueryTables())) { 250 queryWrapper.from(tableName); 251 } 252 } 253 254 public static void setFromIfNecessary(QueryWrapper queryWrapper, String schema, String tableName) { 255 if (StringUtil.hasText(tableName) 256 && CollectionUtil.isEmpty(queryWrapper.getQueryTables())) { 257 queryWrapper.from(new QueryTable(schema, tableName)); 258 } 259 } 260 261 public static boolean containsTable(QueryCondition condition, String... tables) { 262 return condition != null && condition.containsTable(tables); 263 } 264 265 public static QueryWrapper getQueryWrapper(SelectQueryColumn selectQueryColumn) { 266 return selectQueryColumn.getQueryWrapper(); 267 } 268 269 public static boolean isSameTable(QueryTable queryTable, QueryTable otherTable) { 270 return queryTable.isSameTable(otherTable); 271 } 272 273}