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}