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.util.LambdaGetter;
019import com.mybatisflex.core.util.LambdaUtil;
020
021public class QueryMethods {
022
023    public static FunctionQueryColumn count() {
024        return new FunctionQueryColumn("COUNT", new StringQueryColumn("*"));
025    }
026
027    public static FunctionQueryColumn count(String column) {
028        return new FunctionQueryColumn("COUNT", column);
029    }
030
031    public static FunctionQueryColumn count(QueryColumn column) {
032        return new FunctionQueryColumn("COUNT", column);
033    }
034
035    public static FunctionQueryColumn max(String column) {
036        return new FunctionQueryColumn("MAX", column);
037    }
038
039    public static FunctionQueryColumn max(QueryColumn column) {
040        return new FunctionQueryColumn("MAX", column);
041    }
042
043    public static FunctionQueryColumn min(String column) {
044        return new FunctionQueryColumn("MIN", column);
045    }
046
047    public static FunctionQueryColumn min(QueryColumn column) {
048        return new FunctionQueryColumn("MIN", column);
049    }
050
051    public static FunctionQueryColumn avg(String column) {
052        return new FunctionQueryColumn("AVG", column);
053    }
054
055    public static FunctionQueryColumn avg(QueryColumn column) {
056        return new FunctionQueryColumn("AVG", column);
057    }
058
059    public static FunctionQueryColumn sum(String column) {
060        return new FunctionQueryColumn("SUM", column);
061    }
062
063    public static FunctionQueryColumn sum(QueryColumn column) {
064        return new FunctionQueryColumn("SUM", column);
065    }
066
067    public static DistinctQueryColumn distinct(QueryColumn... columns) {
068        return new DistinctQueryColumn(columns);
069    }
070
071    public static CaseQueryColumn.Builder case_() {
072        return new CaseQueryColumn.Builder();
073    }
074
075    public static CaseSearchQueryColumn.Builder case_(QueryColumn queryColumn) {
076        return new CaseSearchQueryColumn.Builder(queryColumn);
077    }
078
079    //CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
080    public static StringFunctionQueryColumn convert(String... params) {
081        return new StringFunctionQueryColumn("CONVERT", params);
082    }
083
084    public static StringQueryColumn column(String column) {
085        return new StringQueryColumn(column);
086    }
087
088    public static QueryColumn column(String table, String column) {
089        return new QueryColumn(null, table, column);
090    }
091
092    public static QueryColumn column(String schema, String table, String column) {
093        return new QueryColumn(schema, table, column);
094    }
095
096    public static <T> QueryColumn column(LambdaGetter<T> fn) {
097        return LambdaUtil.getQueryColumn(fn);
098    }
099
100    public static SelectQueryColumn column(QueryWrapper queryWrapper) {
101        return new SelectQueryColumn(queryWrapper);
102    }
103
104    public static QueryCondition exists(QueryWrapper queryWrapper) {
105        return new OperatorSelectCondition(" EXISTS ", queryWrapper);
106    }
107
108    public static QueryCondition notExists(QueryWrapper queryWrapper) {
109        return new OperatorSelectCondition(" NOT EXISTS ", queryWrapper);
110    }
111
112    public static QueryCondition not(QueryCondition childCondition) {
113        return new OperatorQueryCondition(" NOT ", childCondition);
114    }
115
116    public static QueryCondition noCondition() {
117        return QueryCondition.createEmpty();
118    }
119
120    private static QueryWrapper newWrapper() {
121        return new QueryWrapper();
122    }
123
124
125    public static QueryWrapper select(QueryColumn... queryColumns) {
126        return newWrapper().select(queryColumns);
127    }
128
129    public static QueryWrapper selectOne() {
130        return select(column("1"));
131    }
132
133    public static QueryWrapper selectCount() {
134        return select(count());
135    }
136
137    public static QueryWrapper selectCountOne() {
138        return select(count("1"));
139    }
140
141    public static RawFragment raw(String raw) {
142        return new RawFragment(raw);
143    }
144
145    public static RawFragment raw(String raw, Object... params) {
146        return new RawFragment(raw, params);
147    }
148
149}