@@ -43,6 +43,7 @@ public abstract partial class SqlExpression<T> : ISqlExpression, IHasUntypedSqlE
43
43
public bool WhereStatementWithoutWhereString { get ; set ; }
44
44
public IOrmLiteDialectProvider DialectProvider { get ; set ; }
45
45
public List < IDbDataParameter > Params { get ; set ; }
46
+ public Func < string , string > SqlFilter { get ; set ; }
46
47
47
48
protected string Sep => sep ;
48
49
@@ -84,6 +85,7 @@ protected virtual SqlExpression<T> CopyTo(SqlExpression<T> to)
84
85
to . PrefixFieldWithTableName = PrefixFieldWithTableName ;
85
86
to . WhereStatementWithoutWhereString = WhereStatementWithoutWhereString ;
86
87
to . Params = new List < IDbDataParameter > ( Params ) ;
88
+ to . SqlFilter = SqlFilter ;
87
89
return to ;
88
90
}
89
91
@@ -939,6 +941,12 @@ public virtual SqlExpression<T> Insert()
939
941
return this ;
940
942
}
941
943
944
+ public virtual SqlExpression < T > WithSqlFilter ( Func < string , string > sqlFilter )
945
+ {
946
+ this . SqlFilter = sqlFilter ;
947
+ return this ;
948
+ }
949
+
942
950
public string SqlTable ( ModelDefinition modelDef )
943
951
{
944
952
return DialectProvider . GetQuotedTableName ( modelDef ) ;
@@ -988,17 +996,24 @@ public virtual void CopyParamsTo(IDbCommand dbCmd)
988
996
989
997
public virtual string ToDeleteRowStatement ( )
990
998
{
999
+ string sql ;
991
1000
var hasTableJoin = tableDefs . Count > 1 ;
992
1001
if ( hasTableJoin )
993
1002
{
994
1003
var clone = this . Clone ( ) ;
995
1004
var pk = DialectProvider . GetQuotedColumnName ( modelDef , modelDef . PrimaryKey ) ;
996
1005
clone . Select ( pk ) ;
997
1006
var subSql = clone . ToSelectStatement ( ) ;
998
- var sql = $ "DELETE FROM { DialectProvider . GetQuotedTableName ( modelDef ) } WHERE { pk } IN ({ subSql } )";
999
- return sql ;
1007
+ sql = $ "DELETE FROM { DialectProvider . GetQuotedTableName ( modelDef ) } WHERE { pk } IN ({ subSql } )";
1008
+ }
1009
+ else
1010
+ {
1011
+ sql = $ "DELETE FROM { DialectProvider . GetQuotedTableName ( modelDef ) } { WhereExpression } ";
1000
1012
}
1001
- return $ "DELETE FROM { DialectProvider . GetQuotedTableName ( modelDef ) } { WhereExpression } ";
1013
+
1014
+ return SqlFilter != null
1015
+ ? SqlFilter ( sql )
1016
+ : sql ;
1002
1017
}
1003
1018
1004
1019
public virtual void PrepareUpdateStatement ( IDbCommand dbCmd , T item , bool excludeDefaults = false )
@@ -1031,21 +1046,31 @@ public virtual void PrepareUpdateStatement(IDbCommand dbCmd, T item, bool exclud
1031
1046
if ( setFields . Length == 0 )
1032
1047
throw new ArgumentException ( "No non-null or non-default values were provided for type: " + typeof ( T ) . Name ) ;
1033
1048
1034
- dbCmd . CommandText = $ "UPDATE { DialectProvider . GetQuotedTableName ( modelDef ) } " +
1035
- $ "SET { StringBuilderCache . ReturnAndFree ( setFields ) } { WhereExpression } ";
1049
+ var sql = $ "UPDATE { DialectProvider . GetQuotedTableName ( modelDef ) } " +
1050
+ $ "SET { StringBuilderCache . ReturnAndFree ( setFields ) } { WhereExpression } ";
1051
+
1052
+ dbCmd . CommandText = SqlFilter != null
1053
+ ? SqlFilter ( sql )
1054
+ : sql ;
1036
1055
}
1037
1056
1038
1057
public virtual string ToSelectStatement ( )
1039
1058
{
1040
1059
var sql = DialectProvider
1041
1060
. ToSelectStatement ( modelDef , SelectExpression , BodyExpression , OrderByExpression , Offset , Rows ) ;
1042
1061
1043
- return sql ;
1062
+ return SqlFilter != null
1063
+ ? SqlFilter ( sql )
1064
+ : sql ;
1044
1065
}
1045
1066
1046
1067
public virtual string ToCountStatement ( )
1047
1068
{
1048
- return "SELECT COUNT(*)" + BodyExpression ;
1069
+ var sql = "SELECT COUNT(*)" + BodyExpression ;
1070
+
1071
+ return SqlFilter != null
1072
+ ? SqlFilter ( sql )
1073
+ : sql ;
1049
1074
}
1050
1075
1051
1076
public string SelectExpression
0 commit comments