예제 #1
0
        private static string BuildHeader(RelationalColumn column)
        {
            var sb = new StringBuilder();

            sb.Append(column.Index);
            if (!string.IsNullOrWhiteSpace(column.Name))
            {
                sb.AppendFormat(": {0}", column.Name);
            }
            sb.Append(Environment.NewLine);
            sb.Append(column.Reader.Type.Name);

            if (column.ValueType != column.Reader.Name)
            {
                sb.AppendFormat(" > {0}", column.ValueType);
            }

            if (Settings.Default.ShowOffsets)
            {
                if (column.Reader is PackedBooleanDataReader)
                {
                    sb.AppendFormat(" [{0:X}&{1:X2}]", column.Offset, ((PackedBooleanDataReader)column.Reader).Mask);
                }
                else
                {
                    sb.AppendFormat(" [{0:X}]", column.Offset);
                }
            }

            return(sb.ToString());
        }
예제 #2
0
        private object ProcessSingleColumn(RelationalColumn column, XivRow row)
        {
            if (column.Name != null)
            {
                if (column.ValueType == "Item" && _Columns.Count > 0 && (_Columns.Peek()?.Name?.ToLower()?.StartsWith("amount")).GetValueOrDefault())
                {
                    var amountCol = _Columns.Dequeue();

                    if (row[column.Index] != null)
                    {
                        var itemName   = row[column.Index].ToString();
                        var itemAmount = row[amountCol.Index].ToString();

                        if (string.IsNullOrWhiteSpace(itemName) && (string.IsNullOrWhiteSpace(itemAmount) || itemAmount == "0"))
                        {
                            return(null);
                        }

                        return(new JObject {
                            { "item", itemName },
                            { "amount", itemAmount }
                        });
                    }
                }
                else if (row[column.Index] != null)
                {
                    return(row[column.Index].ToString());
                }
            }
            return(null);
        }
        public override string ToString()
        {
            RelationalColumn defCol = Sheet.Header.DefaultColumn;

            return(defCol == null
                       ? string.Format("{0}#{1}", Sheet.Header.Name, Key)
                       : string.Format("{0}", this[defCol.Index]));
        }
예제 #4
0
 private static Binding CreateCellBinding(RelationalColumn column)
 {
     return(new Binding {
         Converter = CellConverterInstance,
         ConverterParameter = column.Index,
         Mode = BindingMode.OneWay
     });
 }
    public static int?GetLimitedStringLength(this RelationalColumn column)
    {
        if (column.GetAdditionalData("MaxLength") is int length)
        {
            return(length);
        }

        return(null);
    }
예제 #6
0
        private static void SetRelationalSqlParameters(KeyValuePair <object, object> itemChildKeyPair, string tableName, ref string columnList, ref string relationList)
        {
            string           relation;
            RelationalColumn relationConfig = itemChildKeyPair.Key as RelationalColumn;

            columnList += string.Format("{0}.{1} ", relationConfig.TableName.ToLower(), relationConfig.ColumnName);

            if (!string.IsNullOrEmpty(relationConfig.ColumnAlias))
            {
                columnList += string.Format(SQLStatements.SQL_Action_ColumnAlias, relationConfig.ColumnAlias);
            }

            columnList += ", ";

            if (relationConfig.JunctionType == RelationalJunctionType.Mandatory)
            {
                relation = string.Format(SQLStatements.SQL_Action_RelationateMandatorily,
                                         relationConfig.TableName.ToLower(),
                                         string.Concat(tableName, ".", relationConfig.KeyColumn),
                                         string.Concat(relationConfig.TableName, ".",
                                                       relationConfig.ForeignKeyColumn, " "));
            }
            else
            {
                if (!string.IsNullOrEmpty(relationConfig.IntermediaryColumnName))
                {
                    relation = string.Format(SQLStatements.SQL_Action_RelationateOptionally,
                                             relationConfig.IntermediaryColumnName.ToLower(),
                                             string.Concat(tableName, ".", relationConfig.ForeignKeyColumn),
                                             string.Concat(relationConfig.IntermediaryColumnName, ".",
                                                           relationConfig.ForeignKeyColumn));

                    relation += string.Format(SQLStatements.SQL_Action_RelationateOptionally,
                                              relationConfig.TableName,
                                              string.Concat(relationConfig.IntermediaryColumnName, ".", relationConfig.KeyColumn),
                                              string.Concat(relationConfig.TableName, ".", relationConfig.ForeignKeyColumn, " "));
                }
                else
                {
                    relation = string.Format(SQLStatements.SQL_Action_RelationateOptionally,
                                             relationConfig.TableName,
                                             string.Concat(tableName, ".", relationConfig.KeyColumn),
                                             string.Concat(relationConfig.TableName, ".", relationConfig.ForeignKeyColumn));
                }
            }

            if (relation.Contains(relationList) ||
                string.IsNullOrEmpty(relationList))
            {
                relationList = relation;
            }
            else if (!relationList.Contains(relation))
            {
                relationList += relation;
            }
        }
        object IRelationalRow.GetRaw(string columnName)
        {
            RelationalColumn column = Sheet.Header.FindColumn(columnName);

            if (column == null)
            {
                throw new KeyNotFoundException();
            }
            return(column.ReadRaw(Sheet.GetBuffer(), this));
        }
        private object GetColumnValue(string columnName)
        {
            RelationalColumn col = Sheet.Header.FindColumn(columnName);

            if (col == null)
            {
                throw new KeyNotFoundException();
            }
            return(this[col.Index]);
        }
예제 #9
0
        object IRelationalRow.GetRaw(string columnName)
        {
            RelationalColumn column = Sheet.Header.FindColumn(columnName);

            if (column == null)
            {
                throw new KeyNotFoundException();
            }
            return(this.GetRaw(column.Index));
        }
예제 #10
0
 public object this[string columnName] {
     get {
         RelationalColumn col = Sheet.Header.FindColumn(columnName);
         if (col == null)
         {
             throw new KeyNotFoundException();
         }
         return(this[col.Index]);
     }
 }
예제 #11
0
        public RawDataGridTextColumn(RelationalColumn column)
        {
            _Column = column;

            _ContextMenu = new ContextMenu();
            var mi = new MenuItem {
                Header = "Copy",
            };

            mi.Click += OnCopyClick;
            _ContextMenu.Items.Add(mi);
        }
예제 #12
0
        public RawDataGridImageColumn(RelationalColumn column)
        {
            _Column = column;

            _ContextMenu = new ContextMenu();
            var mi = new MenuItem {
                Header = "Save image",
            };

            mi.Click += OnSaveImageClick;
            _ContextMenu.Items.Add(mi);
        }
예제 #13
0
        public static DataGridColumn Create(RelationalColumn column)
        {
            var  sheetDef = column.Header.SheetDefinition;
            Type defType  = null;

            if (sheetDef != null)
            {
                defType = sheetDef.GetValueType(column.Index);
            }
            var targetType = defType ?? column.Reader.Type;

            var header  = BuildHeader(column);
            var binding = CreateCellBinding(column);

            DataGridColumn target;

            if (typeof(SaintCoinach.Imaging.ImageFile).IsAssignableFrom(targetType))
            {
                target = new RawDataGridImageColumn(column)
                {
                    Binding = binding,
                }
            }
            ;
            else if (typeof(System.Drawing.Color).IsAssignableFrom(targetType))
            {
                target = new RawDataGridColorColumn(column)
                {
                    Binding = binding
                }
            }
            ;
            else
            {
                target = new RawDataGridTextColumn(column)
                {
                    Binding = binding
                }
            };

            target.Header      = header;
            target.IsReadOnly  = true;
            target.CanUserSort = true;
            return(target);
        }
예제 #14
0
        private static string BuildHeader(RelationalColumn column)
        {
            var sb = new StringBuilder();

            sb.Append(column.Index);
            if (!string.IsNullOrWhiteSpace(column.Name))
            {
                sb.AppendFormat(": {0}", column.Name);
            }
            sb.Append(Environment.NewLine);
            sb.Append(column.Reader.Type.Name);

            if (column.ValueType != column.Reader.Name)
            {
                sb.AppendFormat(" > {0}", column.ValueType);
            }
            return(sb.ToString());
        }
예제 #15
0
        private void AddItemToRecord(object element, RelationalColumn column, ref JObject record)
        {
            var columnName = CleanColumnName(column.Name);

            // Check if it's a repeating item. If it is, look for an existing element with that name. If one cannot be found, create a new array and add it to the object
            // If it is not a repeating item, add it as is to the record
            if (column.Definition.InnerDefinition is RepeatDataDefinition def && def.RepeatCount > 1)
            {
                // First try to get the existing item
                JArray itemArray;
                if (record.ContainsKey(columnName))
                {
                    itemArray = (JArray)record[columnName];
                }
                else
                {
                    itemArray = new JArray();
                    record.Add(columnName, itemArray);
                }

                itemArray.Add(element);
            }
예제 #16
0
        private static void SetFilterSqlParameters(IDictionary <object, object> entitySqlFilter, string tableName, PersistenceAction action, IDictionary <string, double[]> rangeValues, ref string columnFilterList)
        {
            foreach (var filter in entitySqlFilter)
            {
                if (!filter.Key.Equals("TableName") && !filter.Key.Equals("RelatedEntity"))
                {
                    object filterColumnName  = null;
                    object filterColumnValue = null;
                    object columnName        = null;
                    string columnNameStr     = string.Empty;

                    var itemChildKeyPair = (KeyValuePair <object, object>)filter.Value;
                    if (!(itemChildKeyPair.Key is RelationalColumn))
                    {
                        columnName        = itemChildKeyPair.Key;
                        filterColumnName  = string.Concat(tableName, ".", columnName);
                        filterColumnValue = itemChildKeyPair.Value;
                    }
                    else
                    {
                        RelationalColumn relationConfig = itemChildKeyPair.Key as RelationalColumn;

                        if ((action == PersistenceAction.List) && relationConfig.Filterable)
                        {
                            filterColumnName  = string.Concat(relationConfig.TableName.ToLower(), ".", relationConfig.ColumnName);
                            filterColumnValue = itemChildKeyPair.Value;
                        }
                    }

                    var rangeFilter = false;
                    if (rangeValues != null)
                    {
                        columnNameStr = columnName.ToString();
                        rangeFilter   = rangeValues.ContainsKey(columnNameStr);
                    }

                    if (((filterColumnValue != null) &&
                         (filterColumnValue.ToString() != SqlDefaultValue.Null) &&
                         (filterColumnValue.ToString() != SqlDefaultValue.Zero)) ||
                        rangeFilter)
                    {
                        long fake;
                        bool compareRule = ((action == PersistenceAction.List) ||
                                            (action == PersistenceAction.Count)) &&
                                           !long.TryParse(filterColumnValue.ToString(), out fake) &&
                                           !filterColumnName.ToString().ToLower().Contains("date") &&
                                           !filterColumnName.ToString().ToLower().StartsWith("id") &&
                                           !filterColumnName.ToString().ToLower().EndsWith("id") &&
                                           !filterColumnName.ToString().ToLower().Contains(".id");

                        string comparation = string.Empty;

                        if (!rangeFilter)
                        {
                            comparation = (compareRule)
                                          ? string.Format(SqlOperator.Contains, filterColumnValue.ToString().Replace("'", string.Empty))
                                          : string.Concat(SqlOperator.Equal, filterColumnValue);

                            if (filterColumnValue.Equals(true))
                            {
                                comparation = " = 1";
                            }

                            if ((action == PersistenceAction.Edit) && filterColumnValue.Equals(false))
                            {
                                comparation = " = 0";
                            }

                            if (!filterColumnValue.Equals(false))
                            {
                                columnFilterList += filterColumnName + comparation +
                                                    ((compareRule) ? SqlOperator.Or : SqlOperator.And);
                            }
                        }
                        else
                        {
                            double rangeFrom = rangeValues[columnNameStr][0];
                            double rangeTo   = rangeValues[columnNameStr][1];

                            comparation = string.Format(SqlOperator.Between, rangeFrom, rangeTo);

                            columnFilterList += string.Concat(filterColumnName, " ", comparation, SqlOperator.And);
                        }
                    }
                }
            }
        }
 public static RelationalColumn SetLimitedStringLength(this RelationalColumn column, int length)
 {
     column.SetAdditionalData("MaxLength", length);
     return(column);
 }
 public static RelationalColumn SetUsedByEtlRunInfo(this RelationalColumn column, bool value = true)
 {
     column.SetFlag("EtlRunInfo", value);
     return(column);
 }
 internal RelationalColumnPair(RelationalColumn sourceColumn, RelationalColumn targetColumn)
 {
     SourceColumn = sourceColumn;
     TargetColumn = targetColumn;
 }
 public static RelationalColumn SetHistoryDisabled(this RelationalColumn column, bool value = true)
 {
     column.SetFlag("NoHistory", value);
     return(column);
 }
 public static bool GetHistoryDisabled(this RelationalColumn column)
 {
     return(column.GetFlag("NoHistory"));
 }
 public static bool GetUsedByEtlRunInfo(this RelationalColumn column)
 {
     return(column.GetFlag("EtlRunInfo"));
 }
 public static string NameEscaped(this RelationalColumn column, NamedConnectionString connectionString)
 {
     return(connectionString.Escape(column.Name));
 }
 public static RelationalColumn SetRecordTimestampIndicator(this RelationalColumn column, bool value = true)
 {
     column.SetFlag("TimestampIndicator", value);
     return(column);
 }
예제 #25
0
        private static CustomSqlAdoNetDbReader CreateAutoValidity_ExpandDeferredReaderProcess(AutoValidityRangeBuilder builder, RelationalColumn matchColumn, RelationalColumn[] valueColumns, IReadOnlySlimRow[] rows)
        {
            var parameters = new Dictionary <string, object>
            {
                ["keyList"] = rows
                              .Select(row => row.FormatToString(matchColumn.Name))
                              .Distinct()
                              .ToArray(),
            };

            if (builder.TableBuilder.DwhBuilder.Configuration.InfiniteFutureDateTime != null)
            {
                parameters.Add("InfiniteFuture", builder.TableBuilder.DwhBuilder.Configuration.InfiniteFutureDateTime);
            }

            return(new CustomSqlAdoNetDbReader(builder.TableBuilder.ResilientTable.Topic, "PreviousValueReader")
            {
                ConnectionString = builder.TableBuilder.DwhBuilder.ConnectionString,
                MainTableName = builder.TableBuilder.Table.EscapedName(builder.TableBuilder.DwhBuilder.ConnectionString),
                Sql = "SELECT " + matchColumn.NameEscaped(builder.TableBuilder.DwhBuilder.ConnectionString)
                      + "," + string.Join(", ", valueColumns.Select(c => c.NameEscaped(builder.TableBuilder.DwhBuilder.ConnectionString)))
                      + " FROM " + builder.TableBuilder.Table.EscapedName(builder.TableBuilder.DwhBuilder.ConnectionString)
                      + " WHERE "
                      + matchColumn.NameEscaped(builder.TableBuilder.DwhBuilder.ConnectionString) + " IN (@keyList)"
                      + " and " + builder.TableBuilder.ValidToColumnNameEscaped + (builder.TableBuilder.DwhBuilder.Configuration.InfiniteFutureDateTime == null ? " IS NULL" : "=@InfiniteFuture"),
                InlineArrayParameters = true,
                Parameters = parameters,
            });
        }
 public static bool GetRecordTimestampIndicator(this RelationalColumn column)
 {
     return(column.GetFlag("TimestampIndicator"));
 }