123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Threading.Tasks;
- namespace SqlSugar
- {
- public partial class DefaultDbMethod : IDbMethods
- {
- public virtual string ParameterKeyWord { get; set; }= "@";
- public virtual string RowNumber(MethodCallExpressionModel model)
- {
- if (model.Args.Count == 1)
- {
- return $"row_number() over(order by {model.Args[0].MemberName.ObjToString().TrimEnd('\'').TrimStart('\'')})";
- }
- else
- {
- return $"row_number() over( partition by {model.Args[1].MemberName.ObjToString().TrimEnd('\'').TrimStart('\'')} order by {model.Args[0].MemberName.ObjToString().TrimEnd('\'').TrimStart('\'')})";
- }
- }
- public virtual string RowCount(MethodCallExpressionModel model)
- {
- if (model.Args.Count > 1)
- {
- return $"COUNT({model.Args[0].MemberName}) over( partition by {model.Args[2].MemberName.ObjToString().TrimEnd('\'').TrimStart('\'')} order by {model.Args[1].MemberName.ObjToString().TrimEnd('\'').TrimStart('\'')})";
- }
- return "COUNT(1) over()";
- }
- public string RowSum(MethodCallExpressionModel model)
- {
- if (model.Args.Count > 1)
- {
- return $"SUM({model.Args[0].MemberName}) over( partition by {model.Args[2].MemberName.ObjToString().TrimEnd('\'').TrimStart('\'')} order by {model.Args[1].MemberName.ObjToString().TrimEnd('\'').TrimStart('\'')})";
- }
- return "SUM(" + model.Args[0].MemberName +") over()";
- }
- public string RowAvg(MethodCallExpressionModel model)
- {
- if (model.Args.Count > 1)
- {
- return $"AVG({model.Args[0].MemberName}) over( partition by {model.Args[2].MemberName.ObjToString().TrimEnd('\'').TrimStart('\'')} order by {model.Args[1].MemberName.ObjToString().TrimEnd('\'').TrimStart('\'')})";
- }
- return "AVG(" + model.Args[0].MemberName + ") over()";
- }
- public string RowMin(MethodCallExpressionModel model)
- {
- if (model.Args.Count > 1)
- {
- return $"Min({model.Args[0].MemberName}) over( partition by {model.Args[2].MemberName.ObjToString().TrimEnd('\'').TrimStart('\'')} order by {model.Args[1].MemberName.ObjToString().TrimEnd('\'').TrimStart('\'')})";
- }
- return "Min(" + model.Args[0].MemberName + ") over()";
- }
- public string RowMax(MethodCallExpressionModel model)
- {
- if (model.Args.Count > 1)
- {
- return $"Max({model.Args[0].MemberName}) over( partition by {model.Args[2].MemberName.ObjToString().TrimEnd('\'').TrimStart('\'')} order by {model.Args[1].MemberName.ObjToString().TrimEnd('\'').TrimStart('\'')})";
- }
- return "Max(" + model.Args[0].MemberName + ") over()";
- }
- public virtual string IIF(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- var parameter2 = model.Args[1];
- var parameter3 = model.Args[2];
- return string.Format("( CASE WHEN {0} THEN {1} ELSE {2} END )", parameter.MemberName, parameter2.MemberName, parameter3.MemberName);
- }
- public virtual string IsNullOrEmpty(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- return string.Format("( {0} IS NULL OR {0}='')", parameter.MemberName);
- }
- public virtual string HasValue(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- return string.Format("({0} IS NOT NULL )", parameter.MemberName);
- }
- public virtual string HasNumber(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- return string.Format("( {0}>0 AND {0} IS NOT NULL )", parameter.MemberName);
- }
- public virtual string ToUpper(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- return string.Format(" (UPPER({0})) ", parameter.MemberName);
- }
- public virtual string ToLower(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- return string.Format(" (LOWER({0})) ", parameter.MemberName);
- }
- public virtual string Trim(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- return string.Format(" (rtrim(ltrim({0}))) ", parameter.MemberName);
- }
- public virtual string Contains(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- var parameter2 = model.Args[1];
- return string.Format(" ({0} like '%'+{1}+'%') ", parameter.MemberName, parameter2.MemberName);
- }
- public virtual string ContainsArray(MethodCallExpressionModel model)
- {
- var inValueIEnumerable = (IEnumerable)model.Args[0].MemberValue;
- List<object> inValues = new List<object>();
- if (inValueIEnumerable != null)
- {
- foreach (var item in inValueIEnumerable)
- {
- if (item != null && item.GetType().IsEnum())
- {
- inValues.Add(Convert.ToInt64(item));
- }
- else if (item != null && item.GetType() == UtilConstants.DateType)
- {
- var inStr = Convert.ToDateTime(item).ToString("yyyy-MM-dd HH:mm:ss.fff");
- inValues.Add(inStr);
- }
- else if (item != null && item.GetType()==UtilConstants.ByteArrayType)
- {
- var inStr= BitConverter.ToString((byte[])item).Replace("-", "");
- inValues.Add(inStr);
- }
- else
- {
- inValues.Add(item);
- }
- }
- }
- var value = model.Args[1].MemberName;
- string inValueString = null;
- var isNvarchar = model.Args.Count == 3;
- if (inValues != null && inValues.Count > 0)
- {
- if (isNvarchar&& model.Args[2].MemberValue.Equals(true))
- {
- inValueString = inValues.ToArray().ToJoinSqlInValsN();
- }
- else
- {
- inValueString = inValues.ToArray().ToJoinSqlInVals();
- }
- }
- if (inValueString.IsNullOrEmpty())
- {
- return " (1=2) ";
- }
- else
- {
- return string.Format(" ({0} IN ({1})) ", value, inValueString);
- }
- }
- public virtual string ContainsArrayUseSqlParameters(MethodCallExpressionModel model)
- {
- var inValueIEnumerable = (IEnumerable)model.Args[0].MemberValue;
- List<object> inValues = new List<object>();
- if (inValueIEnumerable != null)
- {
- foreach (var item in inValueIEnumerable)
- {
- if (item != null && item.GetType().IsEnum())
- {
- inValues.Add(Convert.ToInt64(item));
- }
- else
- {
- inValues.Add(item);
- }
- }
- }
- var value = model.Args[1].MemberName;
- string inValueString = null;
- if (inValues != null && inValues.Count > 0)
- {
- for (int i = 0; i < inValues.Count; i++)
- {
- inValueString += model.Data + "_" + i+",";
- }
- }
- if (inValueString.IsNullOrEmpty())
- {
- return " (1=2) ";
- }
- else
- {
- inValueString=inValueString.TrimEnd(',');
- return string.Format(" ({0} IN ({1})) ", value, inValueString);
- }
- }
- public virtual string Equals(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- var parameter2 = model.Args[1];
- return string.Format(" ({0} = {1}) ", parameter.MemberName, parameter2.MemberName); ;
- }
- public virtual string EqualsNull(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- var parameter2 = model.Args[1];
- if (parameter2.MemberValue == null)
- {
- return string.Format(" ({0} is null) ", parameter.MemberName, parameter2.MemberName) ;
- }
- else
- {
- return string.Format(" ({0} = {1}) ", parameter.MemberName, parameter2.MemberName);
- }
- }
- public virtual string DateIsSameDay(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- var parameter2 = model.Args[1];
- return string.Format(" (DATEDIFF(day,{0},{1})=0) ", parameter.MemberName, parameter2.MemberName); ;
- }
- public virtual string DateIsSameByType(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- var parameter2 = model.Args[1];
- var parameter3 = model.Args[2];
- return string.Format(" (DATEDIFF({2},{0},{1})=0) ", parameter.MemberName, parameter2.MemberName, parameter3.MemberValue);
- }
- public virtual string DateAddByType(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- var parameter2 = model.Args[1];
- var parameter3 = model.Args[2];
- return string.Format(" (DATEADD({2},{1},{0})) ", parameter.MemberName, parameter2.MemberName, parameter3.MemberValue);
- }
- public virtual string DateAddDay(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- var parameter2 = model.Args[1];
- return string.Format(" (DATEADD(day,{1},{0})) ", parameter.MemberName, parameter2.MemberName);
- }
- public virtual string Between(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- var parameter1 = model.Args[1];
- var parameter2 = model.Args[2];
- return string.Format(" ({0} BETWEEN {1} AND {2}) ", parameter.MemberName, parameter1.MemberName, parameter2.MemberName);
- }
- public virtual string StartsWith(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- var parameter2 = model.Args[1];
- return string.Format(" ({0} like {1}+'%') ", parameter.MemberName, parameter2.MemberName);
- }
- public virtual string EndsWith(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- var parameter2 = model.Args[1];
- return string.Format(" ({0} like '%'+{1}) ", parameter.MemberName, parameter2.MemberName);
- }
- public virtual string DateValue(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- var parameter2 = model.Args[1];
- if (parameter.MemberName != null && parameter.MemberName is DateTime)
- {
- return string.Format(" DateName({0},'{1}') ", parameter2.MemberValue, parameter.MemberName);
- }
- else
- {
- return string.Format(" DateName({0},{1}) ", parameter2.MemberValue, parameter.MemberName);
- }
- }
- public virtual string GetStringJoinSelector(string result, string separator)
- {
- return $"string_agg(({result})::text,'{separator}') ";
- }
- public virtual string ToInt32(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- return string.Format(" CAST({0} AS INT)", parameter.MemberName);
- }
- public virtual string ToInt64(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- return string.Format(" CAST({0} AS BIGINT)", parameter.MemberName);
- }
- public virtual string ToString(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- return string.Format(" CAST({0} AS NVARCHAR(MAX))", parameter.MemberName);
- }
- public virtual string ToGuid(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- return string.Format(" CAST({0} AS UNIQUEIDENTIFIER)", parameter.MemberName);
- }
- public virtual string ToDouble(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- return string.Format(" CAST({0} AS FLOAT)", parameter.MemberName);
- }
- public virtual string ToBool(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- return string.Format(" CAST({0} AS BIT)", parameter.MemberName);
- }
- public virtual string ToDate(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- return string.Format(" CAST({0} AS DATETIME)", parameter.MemberName);
- }
- public virtual string ToDateShort(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- return string.Format(" CAST({0} AS DATE)", parameter.MemberName);
- }
- public virtual string ToTime(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- return string.Format(" CAST({0} AS TIME)", parameter.MemberName);
- }
- public virtual string ToDecimal(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- return string.Format(" CAST({0} AS MONEY)", parameter.MemberName);
- }
- public virtual string Substring(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- var parameter2 = model.Args[1];
- var parameter3 = model.Args[2];
- return string.Format("SUBSTRING({0},1 + {1},{2})", parameter.MemberName, parameter2.MemberName, parameter3.MemberName);
- }
- public virtual string Length(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- return string.Format("LEN({0})", parameter.MemberName);
- }
- public virtual string Replace(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- var parameter2 = model.Args[1];
- var parameter3 = model.Args[2];
- return string.Format("REPLACE({0},{1},{2})", parameter.MemberName, parameter2.MemberName, parameter3.MemberName);
- }
- public virtual string AggregateSum(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- return string.Format("SUM({0})", parameter.MemberName);
- }
- public virtual string AggregateAvg(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- return string.Format("AVG({0})", parameter.MemberName);
- }
- public virtual string AggregateMin(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- return string.Format("MIN({0})", parameter.MemberName);
- }
- public virtual string AggregateMax(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- return string.Format("MAX({0})", parameter.MemberName);
- }
- public virtual string AggregateCount(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- return string.Format("COUNT({0})", parameter.MemberName);
- }
- public virtual string AggregateDistinctCount(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- return string.Format("COUNT(DISTINCT {0} )", parameter.MemberName);
- }
- public virtual string MappingColumn(MethodCallExpressionModel model)
- {
- if (model.Args.Count == 1)
- {
- return string.Format("{0}", model.Args[0].MemberValue);
- }
- else
- {
- var parameter = model.Args[0];
- var parameter1 = model.Args[1];
- return string.Format("{0}", parameter1.MemberValue);
- }
- }
- public virtual string IsNull(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- var parameter1 = model.Args[1];
- return string.Format("ISNULL({0},{1})", parameter.MemberName, parameter1.MemberName);
- }
- public virtual string True()
- {
- return "( 1 = 1 ) ";
- }
- public virtual string False()
- {
- return "( 1 = 2 ) ";
- }
- public virtual string TrueValue()
- {
- return "1 ";
- }
- public virtual string FalseValue()
- {
- return "0";
- }
- public string GuidNew()
- {
- return "'" + Guid.NewGuid() + "' ";
- }
- public string GetSelfAndAutoFill(string shortName, bool isSingle)
- {
- if (isSingle) return "*";
- else
- return string.Format("{0}.*", shortName);
- }
- public virtual string MergeString(params string[] strings)
- {
- return string.Join("+", strings);
- }
- public virtual string Pack(string sql)
- {
- return "(" + sql + ")";
- }
- public virtual string EqualTrue(string fieldName)
- {
- return "( " + fieldName + "=1 )";
- }
- public virtual string Null()
- {
- return "NULL";
- }
- public virtual string GetDate()
- {
- return "GETDATE()";
- }
- public virtual string GetRandom()
- {
- return "NEWID()";
- }
- public virtual string CaseWhen(List<KeyValuePair<string, string>> sqls)
- {
- StringBuilder reslut = new StringBuilder();
- foreach (var item in sqls)
- {
- if (item.Key == "IF")
- {
- reslut.AppendFormat(" ( CASE WHEN {0} ", item.Value);
- }
- else if (item.Key == "End")
- {
- reslut.AppendFormat("ELSE {0} END )", item.Value);
- }
- else if (item.Key == "Return")
- {
- reslut.AppendFormat(" THEN {0} ", item.Value);
- }
- else {
- reslut.AppendFormat(" WHEN {0} ", item.Value);
- }
- }
- return reslut.ToString();
- }
- public virtual string CharIndex(MethodCallExpressionModel model)
- {
- return string.Format("CHARINDEX ({0},{1})", model.Args[0].MemberName, model.Args[1].MemberName);
- }
- public virtual string CharIndexNew(MethodCallExpressionModel model)
- {
- return CharIndex(model);
- }
- public virtual string ToVarchar(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- return string.Format(" CAST({0} AS VARCHAR(MAX))", parameter.MemberName);
- }
- public virtual string BitwiseAnd(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- var parameter2 = model.Args[1];
- return string.Format(" ({0} & {1}) ", parameter.MemberName, parameter2.MemberName); ;
- }
- public virtual string BitwiseInclusiveOR(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- var parameter2 = model.Args[1];
- return string.Format(" ({0} | {1}) ", parameter.MemberName, parameter2.MemberName); ;
- }
- public string Oracle_ToDate(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- var parameter2 = model.Args[1];
- return string.Format(" to_date({0},{1}) ", parameter.MemberName, parameter2.MemberName); ;
- }
- public string Oracle_ToChar(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- var parameter2 = model.Args[1];
- return string.Format("to_char({0},{1}) ", parameter.MemberName, parameter2.MemberName); ;
- }
- public string SqlServer_DateDiff(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- var parameter2 = model.Args[1];
- var parameter3 = model.Args[2];
- return string.Format(" DATEDIFF({0},{1},{2}) ", parameter.MemberValue?.ToString().ToSqlFilter(), parameter2.MemberName, parameter3.MemberName); ;
- }
- public virtual string FormatRowNumber(MethodCallExpressionModel model)
- {
- var str = model.Args[0].MemberValue.ObjToString();
- var array = model.Args.Skip(1).Select(it => it.IsMember ? it.MemberName : it.MemberValue).ToArray();
- if (array.Length == 1 && array[0] is string[])
- {
- return string.Format("'" + str + "'", array[0] as string[]); ;
- }
- else
- {
- return string.Format("'" + str + "'", array);
- }
- }
- public virtual string Format(MethodCallExpressionModel model)
- {
-
- var str ="'"+ model.Args[0].MemberValue.ObjToString()+"'";
- if (model.Args[0].MemberValue.ObjToString().StartsWith("'") && model.Args[0].MemberValue.ObjToString().EndsWith("'"))
- {
- str = model.Args[0].MemberValue.ObjToString() ;
- }
- var revalue = MergeString("'", "$1", "'");
- if (revalue.Contains("concat("))
- {
- return FormatConcat(model);
- }
- if (model.Args.Count == 2 && model.Args[1].MemberValue is string[])
- {
- List<MethodCallExpressionArgs> args = GetStringFormatArgs(str, model.Args[1].MemberValue as string[]);
- return Format(new MethodCallExpressionModel()
- {
- Args = args
- }); ;
- }
- str =Regex.Replace(str, @"(\{\d+?\})", revalue);
- var array = model.Args.Skip(1).Select(it => it.IsMember?it.MemberName:(it.MemberValue==null?"''":it.MemberValue.ToSqlValue()))
- .Select(it=>ToString(new MethodCallExpressionModel() { Args=new List<MethodCallExpressionArgs>() {
- new MethodCallExpressionArgs(){ IsMember=true, MemberName=it }
- } })).ToArray();
- return string.Format(""+str+ "", array);
- }
- private string FormatConcat(MethodCallExpressionModel model)
- {
- var str = "concat('" + model.Args[0].MemberValue.ObjToString() + "')";
- if (model.Args.Count == 2 && model.Args[1].MemberValue is string[])
- {
- List<MethodCallExpressionArgs> args = GetStringFormatArgs(str, model.Args[1].MemberValue as string[]);
- return Format(new MethodCallExpressionModel()
- {
- Args = args
- }); ;
- }
- str = Regex.Replace(str, @"(\{\d+?\})", "',$1,'");
- var array = model.Args.Skip(1).Select(it => it.IsMember ? it.MemberName : (it.MemberValue == null ? "''" : it.MemberValue.ToSqlValue()))
- .Select(it => ToString(new MethodCallExpressionModel()
- {
- Args = new List<MethodCallExpressionArgs>() {
- new MethodCallExpressionArgs(){ IsMember=true, MemberName=it }
- }
- })).ToArray();
- return string.Format("" + str + "", array);
- }
- public virtual string Abs(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- return string.Format(" ABS({0}) ", parameter.MemberName);
- }
- public virtual string Round(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- var parameter2= model.Args[1];
- return string.Format(" ROUND({0},{1}) ", parameter.MemberName, parameter2.MemberName);
- }
- public virtual string DateDiff(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- var parameter2 = model.Args[1];
- var parameter3 = model.Args[2];
- return string.Format(" DATEDIFF({0},{1},{2}) ", parameter.MemberValue?.ToString().ToSqlFilter(), parameter2.MemberName, parameter3.MemberName);
- }
- public virtual string GreaterThan(MethodCallExpressionModel model)
- {
- //>
- var parameter = model.Args[0];
- var parameter2 = model.Args[1];
- return string.Format(" ({0} > {1}) ", parameter.MemberName, parameter2.MemberName);
- }
- public virtual string GreaterThanOrEqual(MethodCallExpressionModel model)
- {
- //>=
- var parameter = model.Args[0];
- var parameter2 = model.Args[1];
- return string.Format(" ({0} >= {1}) ", parameter.MemberName, parameter2.MemberName);
- }
- public virtual string LessThan(MethodCallExpressionModel model)
- {
- //<
- var parameter = model.Args[0];
- var parameter2 = model.Args[1];
- return string.Format(" ({0} < {1}) ", parameter.MemberName, parameter2.MemberName);
- }
- public virtual string LessThanOrEqual(MethodCallExpressionModel model)
- {
- //<=
- var parameter = model.Args[0];
- var parameter2 = model.Args[1];
- return string.Format(" ({0} <= {1}) ", parameter.MemberName, parameter2.MemberName);
- }
- public virtual string Asc(MethodCallExpressionModel model)
- {
- return model.Args[0].MemberName + " ASC ";
- }
- public virtual string Desc(MethodCallExpressionModel model)
- {
- return model.Args[0].MemberName + " DESC ";
- }
- public virtual string Stuff(MethodCallExpressionModel model)
- {
- var parameter1 = model.Args[0];
- var parameter2 = model.Args[1];
- var parameter3 = model.Args[2];
- var parameter4 = model.Args[3];
- return $" STUFF ({parameter1.MemberName}, {parameter2.MemberName}, {parameter3.MemberName}, {parameter4.MemberName}) ";
- }
- public virtual string Exists(MethodCallExpressionModel model)
- {
- var parameter1 = model.Args[0];
- if (model.Args.Count > 1)
- {
- var parameter2 = model.Args[1];
- if (UtilMethods.IsParentheses(parameter1.MemberName))
- {
- parameter1.MemberName = $" {parameter1.MemberName.ObjToString().Trim().TrimEnd(')')} AND {parameter2.MemberName}) ";
- }
- else
- {
- parameter1.MemberName = $" {parameter1.MemberName} AND {parameter2.MemberName} ";
- }
- }
- if (UtilMethods.IsParentheses(parameter1.MemberName))
- {
- return $" Exists{parameter1.MemberName} ";
- }
- else
- {
- return $" Exists({parameter1.MemberName}) ";
- }
- }
- public virtual string GetDateString(string dateValue, string format)
- {
- return null;
- }
- public virtual string GetForXmlPath()
- {
- return null;
- }
- public virtual string JsonIndex(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- var parameter1 = model.Args[1];
- return $"({parameter.MemberName}::json ->> {parameter1.MemberValue})";
- }
- public virtual string JsonField(MethodCallExpressionModel model)
- {
- throw new NotImplementedException("Current database no support");
- }
- public virtual string JsonContainsFieldName(MethodCallExpressionModel model)
- {
- throw new NotImplementedException("Current database no support");
- }
- public virtual string JsonArrayLength(MethodCallExpressionModel model)
- {
- throw new NotImplementedException("Current database no support");
- }
- public virtual string JsonParse(MethodCallExpressionModel model)
- {
- throw new NotImplementedException("Current database no support");
- }
- public virtual string JsonLike(MethodCallExpressionModel model)
- {
- model.Args[0].MemberName = ToString(model);
- return Contains(model);
- }
- public virtual string Collate(MethodCallExpressionModel model)
- {
- var name=model.Args[0].MemberName;
- return $" {name} collate Chinese_PRC_CS_AS ";
- }
- public virtual string AggregateSumNoNull(MethodCallExpressionModel model)
- {
- model.Args.Add(new MethodCallExpressionArgs() { MemberValue = 0, MemberName = 0 });
- var name= IsNull(model);
- model.Args[0].MemberName = name;
- return AggregateSum(model);
- }
- public virtual string AggregateAvgNoNull(MethodCallExpressionModel model)
- {
- model.Args.Add(new MethodCallExpressionArgs() { MemberValue = 0, MemberName = 0 });
- var name = IsNull(model);
- model.Args[0].MemberName = name;
- return AggregateAvg(model);
- }
- public virtual string JsonListObjectAny(MethodCallExpressionModel model)
- {
- throw new NotImplementedException("Current database no support");
- }
- public virtual string JsonArrayAny(MethodCallExpressionModel model)
- {
- throw new NotImplementedException("Current database no support");
- }
- public virtual string CompareTo(MethodCallExpressionModel model)
- {
- var parameterNameA=model.Args[0].MemberName;
- var parameterNameB = model.Args[1].MemberName;
- return $"(case when {parameterNameA}>{parameterNameB} then 1 when {parameterNameA}={parameterNameB} then 0 else -1 end)";
- }
- public virtual string SplitIn(MethodCallExpressionModel model)
- {
- var fullString = model.Args[0].MemberName+"";
- var value = model.Args[1].MemberName+"";
- var value1 = MergeString(value, "','");
- var value2 = MergeString("','", value);
- var value3 = MergeString("','", value, "','");
- if (model.Args.Count == 3)
- {
- value1 = value1.Replace("','", model.Args[2].MemberName+"" );
- value2 = value2.Replace("','", model.Args[2].MemberName + "" );
- value3 = value3.Replace("','", model.Args[2].MemberName + "" );
- }
- var likeString1 =
- StartsWith(new MethodCallExpressionModel() { Args = new List<MethodCallExpressionArgs>() {
- new MethodCallExpressionArgs(){ IsMember=true, MemberName=fullString },
- new MethodCallExpressionArgs(){ IsMember=true, MemberName=value1 }
- } });
- var likeString2 =
- EndsWith(new MethodCallExpressionModel()
- {
- Args = new List<MethodCallExpressionArgs>() {
- new MethodCallExpressionArgs(){ IsMember=true, MemberName=fullString },
- new MethodCallExpressionArgs(){ IsMember=true, MemberName=value2 }
- }
- });
- var likeString3 =
- Contains(new MethodCallExpressionModel()
- {
- Args = new List<MethodCallExpressionArgs>() {
- new MethodCallExpressionArgs(){ IsMember=true, MemberName=fullString },
- new MethodCallExpressionArgs(){ IsMember=true, MemberName=value3 }
- }
- });
- return $" ({likeString1} or {likeString2} or {likeString3} or {fullString}={value} ) ";
- }
- public string Like(MethodCallExpressionModel model)
- {
- var parameter = model.Args[0];
- var parameter2 = model.Args[1];
- return string.Format(" ({0} like {1} ) ", parameter.MemberName, parameter2.MemberName);
- }
- public string ToSingle(MethodCallExpressionModel model)
- {
- return ToDecimal(model);
- }
- public string ListAny(MethodCallExpressionModel model)
- {
- if (IsArrayAnyParameter(model))
- {
- return ListArrayAny(model);
- }
- StringBuilder sb = new StringBuilder();
- if (model.Args[0].MemberValue!=null&&(model.Args[0].MemberValue as IList).Count>0)
- {
- sb.Append(" ( ");
- var listPar = model.Args[1].MemberValue as ListAnyParameter;
- foreach (var item in (model.Args[0].MemberValue as IList))
- {
- var sql = listPar.Sql;
- if (sb.Length > 3)
- {
- sb.Append("OR");
- }
- foreach (var columnInfo in listPar.Columns)
- {
- var replace = listPar.ConvetColumnFunc($"{listPar.Name}.{columnInfo.DbColumnName}");
- if(sql.Contains(replace))
- {
- var value = columnInfo.PropertyInfo.GetValue(item);
- var newValue = "null";
- if (value != null)
- {
- if (UtilMethods.IsNumber(columnInfo.UnderType.Name))
- {
- newValue = value.ToString();
- }
- else if(columnInfo.UnderType==SqlSugar.UtilConstants.GuidType)
- {
- newValue = ToGuid(new MethodCallExpressionModel()
- {
- Args=new List<MethodCallExpressionArgs>()
- {
- new MethodCallExpressionArgs(){
- MemberValue=value.ToSqlValue(),
- MemberName=value.ToSqlValue()
- }
- }
- });
- }
- else if (columnInfo.UnderType == SqlSugar.UtilConstants.DateType)
- {
- newValue = ToDate(new MethodCallExpressionModel()
- {
- Args = new List<MethodCallExpressionArgs>()
- {
- new MethodCallExpressionArgs(){
- MemberValue=UtilMethods.GetConvertValue( value).ToSqlValue(),
- MemberName=UtilMethods.GetConvertValue( value).ToSqlValue()
- }
- }
- });
- }
- else
- {
- newValue = value.ToSqlValue();
- }
- }
- sql = sql.Replace(replace, newValue);
- }
- }
- sb.Append(sql);
- }
- sb.Append(" ) ");
- }
- var result = sb.ToString();
- if (result.IsNullOrEmpty())
- {
- return " 1=2 ";
- }
- else
- {
- return result;
- }
- }
- public string ListAll(MethodCallExpressionModel model)
- {
- if (IsArrayAnyParameter(model))
- {
- return ListArrayAny(model);
- }
- StringBuilder sb = new StringBuilder();
- if (model.Args[0].MemberValue != null && (model.Args[0].MemberValue as IList).Count > 0)
- {
- sb.Append(" ( ");
- var listPar = model.Args[1].MemberValue as ListAnyParameter;
- foreach (var item in (model.Args[0].MemberValue as IList))
- {
- var sql = listPar.Sql;
- if (sb.Length > 3)
- {
- sb.Append("AND");
- }
- foreach (var columnInfo in listPar.Columns)
- {
- var replace = listPar.ConvetColumnFunc($"{listPar.Name}.{columnInfo.DbColumnName}");
- if (sql.Contains(replace))
- {
- var value = columnInfo.PropertyInfo.GetValue(item);
- var newValue = "null";
- if (value != null)
- {
- if (UtilMethods.IsNumber(columnInfo.UnderType.Name))
- {
- newValue = value.ToString();
- }
- else if (columnInfo.UnderType == SqlSugar.UtilConstants.GuidType)
- {
- newValue = ToGuid(new MethodCallExpressionModel()
- {
- Args = new List<MethodCallExpressionArgs>()
- {
- new MethodCallExpressionArgs(){
- MemberValue=value.ToSqlValue(),
- MemberName=value.ToSqlValue()
- }
- }
- });
- }
- else if (columnInfo.UnderType == SqlSugar.UtilConstants.DateType)
- {
- newValue = ToDate(new MethodCallExpressionModel()
- {
- Args = new List<MethodCallExpressionArgs>()
- {
- new MethodCallExpressionArgs(){
- MemberValue=UtilMethods.GetConvertValue( value).ToSqlValue(),
- MemberName=UtilMethods.GetConvertValue( value).ToSqlValue()
- }
- }
- });
- }
- else
- {
- newValue = value.ToSqlValue();
- }
- }
- sql = sql.Replace(replace, newValue);
- }
- }
- sb.Append(sql);
- }
- sb.Append(" ) ");
- }
- var result = sb.ToString();
- if (result.IsNullOrEmpty())
- {
- return " 1=2 ";
- }
- else
- {
- return result;
- }
- }
- public virtual string GetTableWithDataBase(string dataBaseName,string tableName)
- {
- return $"{dataBaseName}.{tableName}";
- }
- public virtual string Modulo(MethodCallExpressionModel model)
- {
- return "("+model.Args[0].MemberName + " % "+ model.Args[1].MemberName+")";
- }
- private static bool IsArrayAnyParameter(MethodCallExpressionModel model)
- {
- var memberValue = model?.Args?.FirstOrDefault()?.MemberValue;
- return UtilMethods.IsValueTypeArray(memberValue);
- }
- private string ListArrayAny(MethodCallExpressionModel model)
- {
- StringBuilder sb = new StringBuilder();
- if (model.Args[0].MemberValue != null && (model.Args[0].MemberValue as IList).Count > 0)
- {
- sb.Append(" ( ");
- var listPar = model.Args[1].MemberValue as ListAnyParameter;
- foreach (var item in (model.Args[0].MemberValue as IList))
- {
- var sql = listPar.Sql;
- if (sb.Length > 3)
- {
- sb.Append("OR");
- }
- foreach (var columnInfo in listPar.Columns)
- {
- var value = item;
- var newValue = "null";
- if (value != null)
- {
- if (columnInfo.DbTableName!= "String" && UtilMethods.IsNumber(columnInfo.UnderType.Name))
- {
- newValue = value.ToString();
- }
- else if (columnInfo.UnderType == SqlSugar.UtilConstants.GuidType)
- {
- newValue = ToGuid(new MethodCallExpressionModel()
- {
- Args = new List<MethodCallExpressionArgs>()
- {
- new MethodCallExpressionArgs(){
- MemberValue=value.ToSqlValue(),
- MemberName=value.ToSqlValue()
- }
- }
- });
- }
- else if (columnInfo.UnderType == SqlSugar.UtilConstants.DateType)
- {
- newValue = ToDate(new MethodCallExpressionModel()
- {
- Args = new List<MethodCallExpressionArgs>()
- {
- new MethodCallExpressionArgs(){
- MemberValue=UtilMethods.GetConvertValue( value).ToSqlValue(),
- MemberName=UtilMethods.GetConvertValue( value).ToSqlValue()
- }
- }
- });
- }
- else
- {
- newValue = value.ToSqlValue();
- }
- }
- //Regex regex = new Regex("\@");
- if (!sql.Contains(ParameterKeyWord))
- {
- sql = sql.Replace(" =)", $" = {newValue})");
- if (!sql.Contains(newValue))
- {
- sql = sql.Replace(" )", $" = {newValue})");
- }
- }
- else
- {
- Regex reg = new Regex(ParameterKeyWord + @"MethodConst\d+");
- sql = reg.Replace(sql, it =>
- {
- return " " + newValue + " ";
- });
- }
- }
- sb.Append(sql);
- }
- sb.Append(" ) ");
- }
- var result = sb.ToString();
- if (result.IsNullOrEmpty())
- {
- return " 1=2 ";
- }
- else
- {
- return result;
- }
- }
- private static List<MethodCallExpressionArgs> GetStringFormatArgs(string str, object array)
- {
- var args = new List<MethodCallExpressionArgs>()
- {
- new MethodCallExpressionArgs(){
- MemberName=str,
- MemberValue=str
- }
- };
- args.AddRange((array as string[]).Select(it => new MethodCallExpressionArgs()
- {
- MemberValue = it,
- MemberName = it,
- IsMember = (it?.StartsWith("[") == true || it?.StartsWith("`") == true || it?.StartsWith("\"") == true)
- &&
- (it?.EndsWith("]") == true || it?.EndsWith("`") == true || it?.EndsWith("\"") == true)
- }));
- return args;
- }
- public virtual string WeekOfYear(MethodCallExpressionModel mode)
- {
- var parameterNameA = mode.Args[0].MemberName;
- return $" DATE_PART('week', {parameterNameA})+1 ";
- }
- public virtual string TrimEnd(MethodCallExpressionModel mode)
- {
- var parameterNameA = mode.Args[0].MemberName;
- var parameterNameB= mode.Args[1].MemberName;
- return $" CASE WHEN RIGHT({parameterNameA}, 1) = {parameterNameB} THEN LEFT({parameterNameA}, LENGTH({parameterNameA}) - 1) ELSE {parameterNameA} END ";
- }
- public virtual string TrimStart(MethodCallExpressionModel mode)
- {
- var parameterNameA = mode.Args[0].MemberName;
- var parameterNameB = mode.Args[1].MemberName;
- return $" CASE WHEN LEFT({parameterNameA}, 1) = {parameterNameB} THEN RIGHT({parameterNameA}, LEN({parameterNameA}) - 1) ELSE {parameterNameA} END ";
- }
- public virtual string Left(MethodCallExpressionModel mode)
- {
- var parameterNameA = mode.Args[0].MemberName;
- var parameterNameB = mode.Args[1].MemberName;
- return $" LEFT({parameterNameA},{parameterNameB}) ";
- }
- public virtual string Right(MethodCallExpressionModel mode)
- {
- var parameterNameA = mode.Args[0].MemberName;
- var parameterNameB = mode.Args[1].MemberName;
- return $" RIGHT({parameterNameA},{parameterNameB}) ";
- }
- public virtual string PadLeft(MethodCallExpressionModel mode)
- {
- var parameterNameA = mode.Args[0].MemberName;
- var parameterNameB = mode.Args[1].MemberName;
- var parameterNameC = mode.Args[2].MemberName;
- return $" LPAD({parameterNameA},{parameterNameB},{parameterNameC}) ";
- }
- public virtual string Floor(MethodCallExpressionModel mode)
- {
- var parameterNameA = mode.Args[0].MemberName;
- return $" FLOOR({parameterNameA})";
- }
- public virtual string Ceil(MethodCallExpressionModel mode)
- {
- var parameterNameA = mode.Args[0].MemberName;
- return $" CEILING({parameterNameA}) ";
- }
- public virtual string NewUid(MethodCallExpressionModel mode)
- {
- return $" uuid_generate_v4() ";
- }
- public virtual string FullTextContains(MethodCallExpressionModel mode)
- {
- var columns = mode.Args[0].MemberName;
- if (mode.Args[0].MemberValue is List<string>)
- {
- columns = string.Join("|| ' ' ||", mode.Args[0].MemberValue as List<string>) ;
- }
- var searchWord = mode.Args[1].MemberName;
- return $"to_tsvector('chinese', {columns}) @@ to_tsquery('chinese', {searchWord})";
- }
- }
- }
|