Пример #1
0
        internal static void SetTableRelationProperty(this TableRelationProperty property, string propertyValue)
        {
            while (propertyValue.Length > 0)
            {
                var conditions = GetTableRelationConditions(ref propertyValue);
                var tableName  = GetTableRelationTableName(ref propertyValue);
                var fieldName  = GetTableRelationFieldName(ref propertyValue);
                var filters    = GetTableRelationFilters(ref propertyValue);

                var tableRelationLine = property.Value.Add(new TableRelationLine(tableName));
                tableRelationLine.FieldName = fieldName;

                foreach (var condition in conditions)
                {
                    tableRelationLine.Conditions.Add(new TableRelationCondition(condition.FieldName, condition.Type.ToEnum <SimpleTableFilterType>(), condition.Value));
                }

                foreach (var filter in filters)
                {
                    tableRelationLine.TableFilter.Add(new TableRelationTableFilterLine(filter.FieldName, filter.Type.ToEnum <TableFilterType>(), filter.Value));
                }

                Parsing.TryMatch(ref propertyValue, @"^\sELSE\s");
            }
        }
Пример #2
0
        public static void Write(this TableRelationProperty property, bool isLastProperty, PropertiesStyle style, CSideWriter writer)
        {
            var indentations = 0;

            writer.Write("{0}=", property.Name);
            writer.Indent(writer.Column);
            indentations++;

            foreach (var tableRelationLine in property.Value)
            {
                if (tableRelationLine != property.Value.First())
                {
                    writer.Write("ELSE ");
                }

                if (tableRelationLine.Conditions.Any())
                {
                    writer.Write("IF (");

                    // Only indent if multiple conditions exist. Note that C/SIDE doesn't properly unindent.
                    if (tableRelationLine.Conditions.Count() > 1)
                    {
                        writer.Indent(writer.Column); // conditions
                        indentations++;
                    }

                    foreach (var condition in tableRelationLine.Conditions)
                    {
                        writer.Write("{0}={1}({2})", condition.FieldName, condition.Type.ToString().ToUpper(), condition.Value);

                        var isLastCondition = (condition == tableRelationLine.Conditions.Last());

                        switch (isLastCondition)
                        {
                        case false:
                            writer.WriteLine(",");
                            break;
                        }
                    }

                    writer.Write(") ");
                }

                writer.Write(tableRelationLine.TableName.QuotedExcept('/', '.', '-'));

                if (!string.IsNullOrEmpty(tableRelationLine.FieldName))
                {
                    writer.Write(".{0}", tableRelationLine.FieldName.QuotedExcept('/', '.', '-'));
                }

                if (tableRelationLine.TableFilter.Any())
                {
                    writer.Write(" WHERE (");

                    if (tableRelationLine.TableFilter.Count() > 1)
                    {
                        writer.Indent(writer.Column); // filters
                        indentations++;
                    }

                    foreach (var tableFilterLine in tableRelationLine.TableFilter)
                    {
                        writer.Write("{0}={1}({2})", tableFilterLine.FieldName, tableFilterLine.Type.AsString(), tableFilterLine.Value);

                        switch (tableFilterLine == tableRelationLine.TableFilter.Last())
                        {
                        case true:
                            writer.Write(")");
                            break;

                        default:
                            writer.WriteLine(",");
                            break;
                        }
                    }
                }

                var isLastLine = (tableRelationLine == property.Value.Last());

                if (!isLastLine)
                {
                    writer.WriteLine("");
                }
                else
                if (isLastProperty)
                {
                    writer.Write(" ");
                }
                else
                {
                    writer.WriteLine(";");
                }

                //switch (tableRelationLine == property.Value.Last() && !isLastProperty)
                //{
                //    case true:
                //        writer.WriteLine(";");
                //        break;
                //    default:
                //        writer.Write(" ");
                //        break;
                //}
            }

            for (var i = 0; i < indentations; i++)
            {
                writer.Unindent();
            }
        }