private void BuildTableMapSql(SqlBuilder sql, DocumentTableMap tableMap, string option, int no) { if (no == 1) { sql.SetFrom("[{0}] [tm{1}] {2}", tableMap.TableName, no, option); } else { sql.AddJoin(SqlSourceJoinType.Inner, "[{0}] [tm{1}] {2} on [tm{1}].[Id] = [tm1].[Id]", tableMap.TableName, no, option); } if (no == 1) { sql.AddSelect("[tm{0}].[Id]", no); } foreach (var field in tableMap.Fields) { sql.AddSelect("[tm{0}].[{1}]", no, field.FieldName); } if (tableMap.Ancestor != null) { BuildTableMapSql(sql, tableMap.Ancestor, option, no + 1); } }
public void WriteDocToTable(DocumentTableMap map, Doc doc) { using (var command = CreateCommand("")) { var sqlBuilder = new DocTableMapSqlBuilder(command, map, doc); if (sqlBuilder.Build()) { try { DataContext.BeginTransaction(); try { command.ExecuteNonQuery(); DataContext.Commit(); } catch { DataContext.Rollback(); throw; } } catch (Exception) { OutputSqlLog(command.CommandText); throw; } } } }
private string GetTableMapSql(DocumentTableMap tableMap, string alias, string option) { if (tableMap.Ancestor == null) { return(String.Format("[{0}] {1} {2}", tableMap.TableName, alias, option)); } var sql = new SqlBuilder(); BuildTableMapSql(sql, tableMap, option, 1); return(String.Format("({0}) {1}", sql, alias)); }
private void BuildConditions(SqlBuilder builder, ICollection <SqlQueryCondition> conditions, Dictionary <SqlQuerySourceAttribute, int> attrIndexDictionary, DocumentTableMap tableMap, bool needToJoinDocument, ICollection <SqlQueryCondition> usedConditions) { if (conditions != null && conditions.Count > 0) { foreach (var cond in conditions) { if (usedConditions.Contains(cond)) { continue; } if (cond.Condition == ConditionOperation.Exp) { if (cond.Conditions == null) { continue; } var sources = GetConditionListSources(cond.Conditions); if (sources.Count == 1 && sources[0] == this) { builder.AddWhereExp(cond.Operation); try { BuildConditions(builder, cond.Conditions, attrIndexDictionary, tableMap, needToJoinDocument, usedConditions); } finally { builder.EndWhereExp(); } } } else if (cond.Source == this) { //builder.AddJoin(SqlSourceJoinType.Inner, cond.GetConditionSubQuery(i++)); var sql = cond.BuildSourceCondition(attrIndexDictionary, tableMap, needToJoinDocument); builder.AddCondition(cond.Operation, sql); } } } }
private bool NeedToJoinDocument(DocumentTableMap tableMap) { var orgField = tableMap.FindIdentField("Organization_Id"); if (orgField == null && UserId != Guid.Empty && !Source.IsPublic) { return(true); } var createdField = tableMap.FindIdentField("Created"); var lastModifiedField = tableMap.FindIdentField("Last_Modified"); var userField = tableMap.FindIdentField("User_Id"); foreach (var attribute in Attributes) { if (attribute.Def == null) { switch (attribute.Ident) { case SystemIdent.DefId: return(true); case SystemIdent.Modified: if (lastModifiedField == null) { return(true); } break; case SystemIdent.Created: if (createdField == null) { return(true); } break; case SystemIdent.OrgId: case SystemIdent.OrgCode: case SystemIdent.OrgName: if (orgField == null) { return(true); } break; case SystemIdent.UserId: case SystemIdent.UserName: if (userField == null) { return(true); } break; } } /*else * { * var fieldMap = tableMap.FindField(attribute.Def.Id); * if (fieldMap == null) return true; * }*/ } return(false); }
public DocTableMapSqlBuilder(IDbCommand command, DocumentTableMap map, Doc doc) { Command = command; Map = map; Document = doc; }
private static void AddMap(DocumentTableMap map) { Maps.Add(map); }