protected LoadList(IDbCommand dbCmd, SqlExpression <From> q) { dialectProvider = dbCmd.GetDialectProvider(); if (q == null) { q = dialectProvider.SqlExpression <From>(); } this.dbCmd = dbCmd; this.q = q; //Use .Clone() to prevent SqlExpressionSelectFilter from adding params to original query var parentQ = q.Clone(); var sql = parentQ.SelectInto <Into>(); parentResults = dbCmd.ExprConvertToList <Into>(sql, parentQ.Params, onlyFields: q.OnlyFields); modelDef = ModelDefinition <Into> .Definition; fieldDefs = modelDef.AllFieldDefinitionsArray.Where(x => x.IsReference).ToList(); var subQ = q.Clone(); var subQSql = dialectProvider.GetLoadChildrenSubSelect(subQ); subSql = dialectProvider.MergeParamsIntoSql(subQSql, subQ.Params); }
public void SqlExpressionCloneTest() { SqlExpression e = SqlDml.Literal(1); SqlExpression eClone = (SqlExpression)e.Clone(); Assert.AreNotEqual(e, eClone); Assert.AreEqual(e.NodeType, eClone.NodeType); }
protected string GetRefSelfSql(ModelDefinition modelDef, FieldDefinition refSelf, ModelDefinition refModelDef) { // Load Self Table.RefTableId PK var refQ = q.Clone(); refQ.Select(dialectProvider.GetQuotedColumnName(modelDef, refSelf)); var subSqlRef = refQ.ToMergedParamsSelectStatement(); var sqlRef = $"SELECT {this.dialectProvider.GetColumnNames(refModelDef)} FROM {this.dialectProvider.GetQuotedTableName(refModelDef)} WHERE {this.dialectProvider.GetQuotedColumnName(refModelDef.PrimaryKey)} IN ({subSqlRef})"; return(sqlRef); }
protected string GetRefSelfSql(ModelDefinition modelDef, FieldDefinition refSelf, ModelDefinition refModelDef) { //Load Self Table.RefTableId PK var refQ = q.Clone(); refQ.Select(dialectProvider.GetQuotedColumnName(modelDef, refSelf)); refQ.OrderBy().ClearLimits(); //clear any ORDER BY or LIMIT's in Sub Select's var subSqlRef = refQ.ToMergedParamsSelectStatement(); var sqlRef = $"SELECT {dialectProvider.GetColumnNames(refModelDef)} " + $"FROM {dialectProvider.GetQuotedTableName(refModelDef)} " + $"WHERE {dialectProvider.GetQuotedColumnName(refModelDef.PrimaryKey)} " + $"IN ({subSqlRef})"; return(sqlRef); }