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}