Example #1
0
        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);
            }
        }
Example #2
0
        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;
                    }
                }
            }
        }
Example #3
0
        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));
        }
Example #4
0
        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);
                    }
                }
            }
        }
Example #5
0
        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);
 }