public DataReaderTestsSandbox()
            : base()
        {
            // Arrange by registering our fake services into the test container.
            FakeCrmDbConnection = this.RegisterMockInstance<CrmDbConnection>();
            this.Container.Register<DbConnection>(FakeCrmDbConnection);

            CrmConnectionInfo connInfo = new CrmConnectionInfo();
            connInfo.BusinessUnitId = Guid.NewGuid();
            connInfo.OrganisationId = Guid.NewGuid();
            connInfo.OrganisationName = "UnitTesting";
            connInfo.ServerVersion = "1.0.0.0";
            connInfo.UserId = Guid.NewGuid();

            FakeCrmDbConnection.Stub(c => c.ConnectionInfo).Return(connInfo);

            SchemaTableProvider = new SchemaTableProvider();
            this.Container.Register<ISchemaTableProvider>(SchemaTableProvider); // Singleton.

            // Create some fake results data
            FakeResultSet = new EntityResultSet(null, null, null);
            FakeResultSet.ColumnMetadata = new List<ColumnMetadata>();

            var firstNameAttInfo = new StringAttributeInfo();
            firstNameAttInfo.AttributeType = AttributeTypeCode.String;
            firstNameAttInfo.LogicalName = "firstname";
            var firstNameC = new ColumnMetadata(firstNameAttInfo);

            var lastNameAttInfo = new StringAttributeInfo();
            lastNameAttInfo.AttributeType = AttributeTypeCode.String;
            lastNameAttInfo.LogicalName = "lastname";
            var lastnameC = new ColumnMetadata(lastNameAttInfo);

            FakeResultSet.ColumnMetadata.Add(firstNameC);
            FakeResultSet.ColumnMetadata.Add(lastnameC);
            FakeResultSet.Results = new EntityCollection(new List<Entity>());
            var result = new Entity("contact");
            result.Id = Guid.NewGuid();
            result["firstname"] = "joe";
            result["lastname"] = "schmoe";
            FakeResultSet.Results.Entities.Add(result);

            this.Container.Register<EntityResultSet>(FakeResultSet);
            this.Container.Register<ResultSet>(FakeResultSet);
        }
示例#2
0
        private void InitMainGraphTableColumn(Type parentType, ColumnMetadata mainTableColumn)
        {
            //if (parentType.Name == "ApplicationUser")
            //    Console.WriteLine($"{mainTableColumn.ColumnName} GraphType: {GraphUtils.ResolveGraphType(mainTableColumn.Type)} Type: {mainTableColumn.Type} IsList {mainTableColumn.IsList}");
            // instancias internas
            if (mainTableColumn.IsJson)    // incluye litas de cada objeto
            {
                Field(
                    typeof(string).GetGraphTypeFromType(true),
                    mainTableColumn.ColumnName,
                    resolve: context =>
                {
                    var pi        = parentType.GetProperty(mainTableColumn.ColumnName);
                    dynamic value = pi.GetValue(context.Source);
                    if (value == null)
                    {
                        return(null);
                    }
                    return(System.Text.Json.JsonSerializer.Serialize(value));
                }
                    );
                FillArgs(mainTableColumn.ColumnName, mainTableColumn.Type);
            }
            else if (mainTableColumn.IsList)    // incluye litas de cada objeto
            {
                var queryThirdArguments = new QueryArguments
                {
                    new QueryArgument <IntGraphType> {
                        Name = "first"
                    },
                    new QueryArgument <StringGraphType> {
                        Name = "orderBy"
                    },
                    new QueryArgument <StringGraphType> {
                        Name = "all"
                    },
                    new QueryArgument <BooleanGraphType> {
                        Name = "join"
                    }
                };

                var listObjectGraph = GetPrimaryListInstances(mainTableColumn, queryThirdArguments: queryThirdArguments, isList: true);

                var     inherateType = typeof(CustomListResolver <>).MakeGenericType(new Type[] { mainTableColumn.Type });
                dynamic resolver     = Activator.CreateInstance(inherateType, new object[] { mainTableColumn.Type, parentType, _httpContextAccessor, _accessor, _dbMetadata });

                AddField(new FieldType
                {
                    Name         = $"{mainTableColumn.ColumnName}",
                    ResolvedType = listObjectGraph,
                    Arguments    = queryThirdArguments,
                    Resolver     = resolver
                });
            }
            else if (typeof(IBaseModel).IsAssignableFrom(mainTableColumn.Type) ||
                     _dbMetadata.GetTableMetadatas().Any(x => x.Type == mainTableColumn.Type))
            {
                GetInternalInstances(mainTableColumn);
            }
            else if (mainTableColumn.Type == typeof(Point) ||
                     mainTableColumn.Type == typeof(Coordinate) ||
                     mainTableColumn.Type == typeof(LineString) ||
                     mainTableColumn.Type == typeof(Polygon) ||
                     mainTableColumn.Type == typeof(MultiLineString))
            {
                Field(
                    typeof(string).GetGraphTypeFromType(true),
                    mainTableColumn.ColumnName,
                    resolve: context =>
                {
                    var pi        = parentType.GetProperty(mainTableColumn.ColumnName);
                    dynamic point = pi.GetValue(context.Source);
                    if (point == null)
                    {
                        return(null);
                    }
                    return(JsonExtensions.SerializeWithGeoJson(point, formatting: Formatting.None));
                }
                    );
                FillArgs(mainTableColumn.ColumnName, mainTableColumn.Type);
            }
            else if (mainTableColumn.Type == typeof(TimeSpan))
            {
                Field(
                    typeof(string).GetGraphTypeFromType(true),
                    mainTableColumn.ColumnName,
                    resolve: context =>
                {
                    var pi    = parentType.GetProperty(mainTableColumn.ColumnName);
                    var value = pi.GetValue(context.Source);
                    if (value == null)
                    {
                        return(null);
                    }
                    return(((TimeSpan)value).ToString());
                }
                    );
                FillArgs(mainTableColumn.ColumnName, mainTableColumn.Type);
            }
            else
            {
                Field(
                    GraphUtils.ResolveGraphType(mainTableColumn.Type),
                    mainTableColumn.ColumnName
                    );
                FillArgs(mainTableColumn.ColumnName, mainTableColumn.Type);

                if (mainTableColumn.Type.IsEnum)
                {
                    FillArgs($"{mainTableColumn.ColumnName}_enum", typeof(int));
                    AddField(
                        new FieldType
                    {
                        Type     = typeof(int).GetGraphTypeFromType(true),
                        Name     = $"{mainTableColumn.ColumnName}_value",
                        Resolver = new EnumResolver(parentType, mainTableColumn.ColumnName)
                    }
                        );
                }
            }
        }
示例#3
0
        private dynamic GetThirdGraphType(TableMetadata metaTable, ColumnMetadata columnMetadata, QueryArguments queryArguments)
        {
            string  key = $"Third_{columnMetadata.Type.Name}";
            dynamic objectGraphInternal = null;

            if (!_tableNameLookup.ExistGraphType(key))
            {
                var inherateType = typeof(ObjectGraphType <>).MakeGenericType(new Type[] { metaTable.Type });

                objectGraphInternal      = Activator.CreateInstance(inherateType);
                objectGraphInternal.Name = key;
                var permission        = columnMetadata.Type.Name.ToLower();
                var friendlyTableName = Generic.StringExt.CanonicalName(Utilities.StringExt.ToSnakeCase(columnMetadata.Type.Name));


                foreach (var tableColumn in metaTable.Columns)
                {
                    if (tableColumn.IsJson)
                    {
                        objectGraphInternal.AddField(
                            new FieldType
                        {
                            Type     = typeof(string).GetGraphTypeFromType(true),
                            Name     = tableColumn.ColumnName,
                            Resolver = new JsonResolver(metaTable.Type, tableColumn.ColumnName)
                        }
                            );
                        FillArguments(queryArguments, tableColumn.ColumnName, tableColumn.Type);
                    }
                    else if (tableColumn.IsList)
                    {
                        try
                        {
                            var queryThirdArguments = new QueryArguments
                            {
                                new QueryArgument <StringGraphType> {
                                    Name = "all"
                                }
                            };
                            var metaTableInherit = _dbMetadata.GetTableMetadatas().FirstOrDefault(x => x.Type.Name == tableColumn.Type.Name);
                            var listObjectGraph  = GetFourthGraphType(metaTableInherit, tableColumn, queryThirdArguments, isList: true);

                            objectGraphInternal.AddField(new FieldType
                            {
                                Name         = $"{tableColumn.ColumnName}",
                                ResolvedType = listObjectGraph,
                                Arguments    = queryThirdArguments
                            });
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e.ToString());
                            objectGraphInternal.Field(
                                GraphUtils.ResolveGraphType(typeof(string)),
                                tableColumn.ColumnName
                                );
                            FillArguments(queryArguments, tableColumn.ColumnName, tableColumn.Type);
                        }
                    }
                    else if (typeof(IBaseModel).IsAssignableFrom(tableColumn.Type) ||
                             _dbMetadata.GetTableMetadatas().Any(x => x.Type == tableColumn.Type))
                    {
                        var queryThirdArguments = new QueryArguments
                        {
                            new QueryArgument <StringGraphType> {
                                Name = "all"
                            }
                        };
                        var metaTableInherit = _dbMetadata.GetTableMetadatas().FirstOrDefault(x => x.Type.Name == tableColumn.Type.Name);
                        var tableType        = GetFourthGraphType(metaTableInherit, tableColumn, queryThirdArguments);

                        objectGraphInternal.AddField(new FieldType
                        {
                            Name         = $"{tableColumn.ColumnName}",
                            ResolvedType = tableType,
                            Arguments    = queryThirdArguments
                        });
                    }
                    else if (columnMetadata.Type == typeof(Point) ||
                             columnMetadata.Type == typeof(Coordinate) ||
                             columnMetadata.Type == typeof(LineString) ||
                             columnMetadata.Type == typeof(Polygon) ||
                             columnMetadata.Type == typeof(MultiLineString))
                    {
                        objectGraphInternal.AddField(
                            new FieldType
                        {
                            Type     = typeof(string).GetGraphTypeFromType(true),
                            Name     = columnMetadata.ColumnName,
                            Resolver = new PointResolver(metaTable.Type, columnMetadata.ColumnName)
                        }
                            );
                        FillArguments(queryArguments, columnMetadata.ColumnName, columnMetadata.Type);
                    }
                    else if (tableColumn.Type == typeof(TimeSpan))
                    {
                        objectGraphInternal.AddField(
                            new FieldType
                        {
                            Type     = typeof(string).GetGraphTypeFromType(true),
                            Name     = tableColumn.ColumnName,
                            Resolver = new TimeSpanResolver(metaTable.Type, tableColumn.ColumnName)
                        }
                            );
                        FillArguments(queryArguments, tableColumn.ColumnName, tableColumn.Type);
                    }
                    else
                    {
                        objectGraphInternal.Field(
                            GraphUtils.ResolveGraphType(tableColumn.Type),
                            tableColumn.ColumnName
                            );
                        FillArguments(queryArguments, tableColumn.ColumnName, tableColumn.Type);

                        if (columnMetadata.Type.IsEnum)
                        {
                            FillArguments(queryArguments, $"{columnMetadata.ColumnName}_enum", typeof(int));
                            objectGraphInternal.AddField(
                                new FieldType
                            {
                                Type     = typeof(int).GetGraphTypeFromType(true),
                                Name     = $"{columnMetadata.ColumnName}_value",
                                Resolver = new EnumResolver(metaTable.Type, columnMetadata.ColumnName)
                            }
                                );
                        }
                    }
                }
            }
            else
            {
                foreach (var tableColumn in metaTable.Columns)
                {
                    FillArguments(queryArguments, tableColumn.ColumnName, tableColumn.Type);
                }
            }
            return(_tableNameLookup.GetOrInsertGraphType(key, objectGraphInternal));
        }
示例#4
0
 /// <summary>
 /// Initializes a new instance of the IndexColumnMetadata class.
 /// </summary>
 /// <param name="column">The underlying column details.</param>
 /// <param name="isDescending">Indicates the column is indexed in descending order.</param>
 /// <param name="isIncluded">Indicates the column is an unindexed, included column.</param>
 public IndexColumnMetadata(ColumnMetadata <TDbType> column, bool?isDescending, bool isIncluded) : base(column, isDescending, isIncluded)
 {
     Details = column;
 }
示例#5
0
        MultipleRowDbCommandBuilder <NpgsqlCommand, NpgsqlParameter> GetByKeyList <T>(PostgreSqlObjectName tableName, ColumnMetadata <NpgsqlDbType> columnMetadata, IEnumerable <T> keys)
        {
            var keyList = keys.AsList();

            string where;
            if (keys.Count() > 1)
            {
                where = columnMetadata.SqlName + " IN (" + string.Join(", ", keyList.Select((s, i) => "@Param" + i)) + ")";
            }
            else
            {
                where = columnMetadata.SqlName + " = @Param0";
            }

            var parameters = new List <NpgsqlParameter>();

            for (var i = 0; i < keyList.Count; i++)
            {
                var param = new NpgsqlParameter("@Param" + i, keyList[i]);
                if (columnMetadata.DbType.HasValue)
                {
                    param.NpgsqlDbType = columnMetadata.DbType.Value;
                }
                parameters.Add(param);
            }

            return(new PostgreSqlTableOrView(this, tableName, where, parameters));
        }
        MultipleRowDbCommandBuilder <SqlCommand, SqlParameter, TObject> OnGetByKeyList <TObject, TKey>(SqlServerObjectName tableName, ColumnMetadata <SqlDbType> columnMetadata, IEnumerable <TKey> keys)
            where TObject : class
        {
            var keyList = keys.AsList();

            string where;
            if (keys.Count() > 1)
            {
                where = columnMetadata.SqlName + " IN (" + string.Join(", ", keyList.Select((s, i) => "@Param" + i)) + ")";
            }
            else
            {
                where = columnMetadata.SqlName + " = @Param0";
            }

            var parameters = new List <SqlParameter>();

            for (var i = 0; i < keyList.Count; i++)
            {
                var param = new SqlParameter("@Param" + i, keyList[i]);
                if (columnMetadata.DbType.HasValue)
                {
                    param.SqlDbType = columnMetadata.DbType.Value;
                }
                parameters.Add(param);
            }

            return(new MultipleRowDbCommandBuilder <SqlCommand, SqlParameter, TObject>(new SqlServerTableOrView <TObject>(this, tableName, where, parameters)));
        }
 /// <summary>
 /// 获取指定列的值生成对象。
 /// </summary>
 /// <param name="column">指定数据列元数据。</param>
 /// <returns>值生成对象。</returns>
 protected abstract ValueGenerateBase GetValueGenerator(ColumnMetadata column);
示例#8
0
        PostgreSqlTableOrView <TObject> OnGetByKey <TObject, TKey>(PostgreSqlObjectName tableName, ColumnMetadata <NpgsqlDbType> columnMetadata, TKey key)
            where TObject : class
        {
            string where = columnMetadata.SqlName + " = @Param0";

            var parameters = new List <NpgsqlParameter>();
            var param      = new NpgsqlParameter("@Param0", key);

            if (columnMetadata.DbType.HasValue)
            {
                param.NpgsqlDbType = columnMetadata.DbType.Value;
            }
            parameters.Add(param);

            return(new PostgreSqlTableOrView <TObject>(this, tableName, where, parameters));
        }
示例#9
0
    MultipleRowDbCommandBuilder <AbstractCommand, AbstractParameter> IGetByKeyHelper <AbstractCommand, AbstractParameter, AbstractObjectName, AbstractDbType> .OnGetByKeyList <TObject, TKey>(AbstractObjectName tableName, ColumnMetadata <AbstractDbType> keyColumn, IEnumerable <TKey> keys) where TObject : class
    {
        var keyList = keys.AsList();

        string where;
        if (keys.Count() > 1)
        {
            where = keyColumn.SqlName + " IN (" + string.Join(", ", keyList.Select((s, i) => "@Param" + i)) + ")";
        }
        else
        {
            where = keyColumn.SqlName + " = @Param0";
        }

        var parameters = new List <OleDbParameter>();

        for (var i = 0; i < keyList.Count; i++)
        {
            var param = new OleDbParameter("@Param" + i, keyList[i]);
            if (keyColumn.DbType.HasValue)
            {
                param.OleDbType = keyColumn.DbType.Value;
            }
            parameters.Add(param);
        }

        return(new MultipleRowDbCommandBuilder <OleDbCommand, OleDbParameter, TObject>(new AccessTableOrView <TObject>(this, tableName, where, parameters)));
    }
示例#10
0
    MultipleRowDbCommandBuilder <AbstractCommand, AbstractParameter> IGetByKeyHelper <AbstractCommand, AbstractParameter, AbstractObjectName, AbstractDbType> .OnGetByKey <TObject, TKey>(AbstractObjectName tableName, ColumnMetadata <AbstractDbType> keyColumn, TKey key)
        where TObject : class
    {
        string where = keyColumn.SqlName + " = @Param0";

        var parameters = new List <OleDbParameter>();
        var param      = new OleDbParameter("@Param0", key);

        if (keyColumn.DbType.HasValue)
        {
            param.OleDbType = keyColumn.DbType.Value;
        }
        parameters.Add(param);

        return(new AccessTableOrView <TObject>(this, tableName, where, parameters));
    }
示例#11
0
        /// <summary>
        /// Create table function/stored procedure result set model using existing entity or custom model.
        /// </summary>
        /// <param name="funcName">Database name for function/procedure.</param>
        /// <param name="columns">Result set columns schema. Must be ordered by ordinal.</param>
        /// <returns>Model for result set.</returns>
        private FunctionResult PrepareResultSetModel(SqlObjectName funcName, IReadOnlyCollection <ResultColumn> columns)
        {
            // try to find entity model with same set of columns
            // column equality check includes: name, database type and nullability
            if (_options.DataModel.MapProcedureResultToEntity)
            {
                var names = new Dictionary <string, (DatabaseType type, bool isNullable)>();
                foreach (var column in columns)
                {
                    // columns without name or duplicate names indicate that it is not entity and requires custom
                    // mapper with by-ordinal mapping
                    if (string.IsNullOrEmpty(column.Name) || names.ContainsKey(column.Name !))
                    {
                        break;
                    }

                    names.Add(column.Name !, (column.Type, column.Nullable));
                }

                if (names.Count == columns.Count)
                {
                    foreach (var(schemaObject, entity) in _entities.Values)
                    {
                        if (schemaObject.Columns.Count == names.Count)
                        {
                            var match = true;
                            foreach (var column in schemaObject.Columns)
                            {
                                if (!names.TryGetValue(column.Name, out var columnType) ||
                                    !column.Type.Equals(columnType.type) ||
                                    column.Nullable != columnType.isNullable)
                                {
                                    match = false;
                                    break;
                                }
                            }

                            if (match)
                            {
                                return(new FunctionResult(null, _entities[schemaObject.Name].Entity, null));
                            }
                        }
                    }
                }
            }

            var resultClass = new ClassModel(
                _namingServices.NormalizeIdentifier(
                    _options.DataModel.ProcedureResultClassNameOptions,
                    (funcName.Package != null ? $"{funcName.Package}_" : null) + funcName.Name))
            {
                Modifiers = Modifiers.Partial | Modifiers.Public
            };
            var model = new ResultTableModel(resultClass);

            foreach (var col in columns)
            {
                var typeMapping = MapType(col.Type);

                var metadata = new ColumnMetadata()
                {
                    Name      = col.Name ?? string.Empty,
                    DbType    = _options.DataModel.GenerateDbType   ? col.Type             : null,
                    DataType  = _options.DataModel.GenerateDataType ? typeMapping.DataType : null,
                    CanBeNull = col.Nullable
                };

                var property = new PropertyModel(
                    _namingServices.NormalizeIdentifier(_options.DataModel.ProcedureResultColumnPropertyNameOptions, col.Name ?? "Column"),
                    typeMapping.CLRType.WithNullability(col.Nullable))
                {
                    Modifiers = Modifiers.Public,
                    HasSetter = true,
                    IsDefault = true,
                };

                var colModel = new ColumnModel(metadata, property);
                model.Columns.Add(colModel);
            }

            return(new FunctionResult(model, null, null));
        }
        AccessTableOrView <TObject> OnGetByKey <TObject, TKey>(AccessObjectName tableName, ColumnMetadata <OleDbType> columnMetadata, TKey key)
            where TObject : class
        {
            string where = columnMetadata.SqlName + " = @Param0";

            var parameters = new List <OleDbParameter>();
            var param      = new OleDbParameter("@Param0", key);

            if (columnMetadata.DbType.HasValue)
            {
                param.OleDbType = columnMetadata.DbType.Value;
            }
            parameters.Add(param);

            return(new AccessTableOrView <TObject>(this, tableName, where, parameters));
        }
示例#13
0
 /// <summary>
 /// 根据列元数据获取相应的值生成对象。
 /// </summary>
 /// <param name="column">列元数据。</param>
 /// <returns>值生成对象。</returns>
 public abstract ValueGenerateBase GetValueGenerator(ColumnMetadata column);
示例#14
0
 /// <summary>
 /// 创建普通提交成员。
 /// </summary>
 /// <param name="metadata">列元数据。</param>
 /// <param name="gnerator">值生成器。</param>
 /// <param name="columnType">列提交类型。</param>
 public CommitMember(ColumnMetadata metadata, ValueGenerateBase gnerator, ECommitValueType columnType)
 {
     Metadata  = metadata;
     Generator = gnerator;
     ValueType = columnType;
 }
示例#15
0
 /// <summary>
 /// 创建普通提交成员。
 /// </summary>
 /// <param name="metadata">列元数据。</param>
 public CommitMember(ColumnMetadata metadata)
     : this(metadata, null, ECommitValueType.Constant)
 {
 }
        /// <summary>
        ///     Initialeses DataGrid And Generates Columns From The Bound ViewModels Grid Fields
        /// </summary>
        /// <param name="gridSectionViewModel"></param>
        /// <param name="dynamicDataGrid"></param>
        public static void CreateDataGrid(DynamicGridViewModel gridSectionViewModel, DataGrid dynamicDataGrid)
        {
            //want to do any service calls asynchronously
            dynamicDataGrid.CanUserAddRows = false;
            dynamicDataGrid.Columns.Clear();
            if (gridSectionViewModel != null)
            {
                gridSectionViewModel.ApplicationController.DoOnAsyncThread(() =>
                {
                    if (gridSectionViewModel.FieldMetadata == null)
                    {
                        return;
                    }
                    var columnMetadata = new List <ColumnMetadata>();
                    foreach (var gridField in gridSectionViewModel.FieldMetadata.OrderBy(gf => gf.Order))
                    {
                        var fieldName = gridField.FieldName;
                        var fieldType = gridSectionViewModel.RecordService.GetFieldType(fieldName,
                                                                                        gridSectionViewModel
                                                                                        .RecordType);

                        var header = gridSectionViewModel.RecordService.GetFieldLabel(fieldName,
                                                                                      gridSectionViewModel.RecordType);
                        var thisColumn = new ColumnMetadata(fieldName, header, fieldType, gridField.WidthPart,
                                                            gridField.IsEditable);
                        columnMetadata.Add(thisColumn);
                    }

                    gridSectionViewModel.ApplicationController.DoOnMainThread(() =>
                    {
                        if (gridSectionViewModel.CanDelete)
                        {
                            var deleteColumn     = new DeleteRowColumn();
                            deleteColumn.Binding = new Binding("DeleteRowViewModel");
                            dynamicDataGrid.Columns.Add(deleteColumn);
                        }
                        if (gridSectionViewModel.CanEdit)
                        {
                            var editColumn     = new EditRowColumn();
                            editColumn.Binding = new Binding("EditRowViewModel");
                            dynamicDataGrid.Columns.Add(editColumn);
                        }
                        foreach (var column in columnMetadata)
                        {
                            var cellBinding = new Binding
                            {
                                Path = new PropertyPath(string.Concat("[", column.FieldName, "]")),
                                Mode = BindingMode.TwoWay
                            };
                            DataGridColumn dataGridField;
                            if (column.FieldType == RecordFieldType.Boolean)
                            {
                                dataGridField = new GridBooleanColumn
                                {
                                    Binding = cellBinding
                                }
                            }
                            ;
                            else if (column.FieldType == RecordFieldType.RecordType)
                            {
                                dataGridField = new GridPicklistColumn()
                                {
                                    Binding = cellBinding
                                }
                            }
                            ;
                            else if (column.FieldType == RecordFieldType.RecordField)
                            {
                                var metadata = gridSectionViewModel.RecordService.GetFieldMetadata(column.FieldName, gridSectionViewModel.RecordType);
                                if (metadata.IsMultiSelect)
                                {
                                    dataGridField = new GridMultiSelectColumn()
                                    {
                                        Binding = cellBinding
                                    };
                                }
                                else
                                {
                                    dataGridField = new GridPicklistColumn()
                                    {
                                        Binding = cellBinding
                                    };
                                }
                            }
                            else if (column.FieldType == RecordFieldType.Picklist)
                            {
                                var metadata = gridSectionViewModel.RecordService.GetFieldMetadata(column.FieldName, gridSectionViewModel.RecordType);
                                if (metadata.IsMultiSelect)
                                {
                                    dataGridField = new GridMultiSelectColumn()
                                    {
                                        Binding = cellBinding
                                    };
                                }
                                else
                                {
                                    dataGridField = new GridPicklistColumn()
                                    {
                                        Binding = cellBinding
                                    };
                                }
                            }
                            else if (column.FieldType == RecordFieldType.Lookup)
                            {
                                if (gridSectionViewModel.FormController.FormService != null
                                    &&
                                    gridSectionViewModel.FormController.FormService.UsePicklist(column.FieldName,
                                                                                                gridSectionViewModel.RecordType))
                                {
                                    dataGridField = new GridLookupPicklistColumn()
                                    {
                                        Binding = cellBinding
                                    };
                                }
                                else
                                {
                                    dataGridField = new GridLookupColumn()
                                    {
                                        Binding = cellBinding
                                    };
                                }
                            }
                            else if (column.FieldType == RecordFieldType.Password)
                            {
                                dataGridField = new GridPasswordColumn()
                                {
                                    Binding = cellBinding
                                };
                            }
                            else if (column.FieldType == RecordFieldType.Enumerable)
                            {
                                dataGridField = new GridEnumerableColumn()
                                {
                                    Binding = cellBinding
                                };
                            }
                            else if (column.FieldType == RecordFieldType.Object)
                            {
                                dataGridField = new GridLookupPicklistColumn()
                                {
                                    Binding = cellBinding
                                };
                            }
                            else if (column.FieldType == RecordFieldType.FileRef)
                            {
                                dataGridField = new GridFileRefColumn()
                                {
                                    Binding = cellBinding
                                };
                            }
                            else if (column.FieldType == RecordFieldType.Integer)
                            {
                                var format = gridSectionViewModel.RecordService.GetIntegerFormat(column.FieldName,
                                                                                                 gridSectionViewModel.RecordType);
                                if (format == IntegerType.TimeZone || format == IntegerType.Language)
                                {
                                    dataGridField = new GridIntPicklistColumn()
                                    {
                                        Binding = cellBinding
                                    };
                                }
                                else
                                {
                                    dataGridField = new GridIntColumn()
                                    {
                                        Binding = cellBinding
                                    };
                                }
                            }
                            else if (column.FieldType == RecordFieldType.BigInt)
                            {
                                dataGridField = new GridIntColumn()
                                {
                                    Binding = cellBinding
                                };
                            }
                            else if (column.FieldType == RecordFieldType.Date)
                            {
                                dataGridField = new GridDateColumn()
                                {
                                    Binding = cellBinding
                                };
                            }
                            else if (column.FieldType == RecordFieldType.Decimal)
                            {
                                dataGridField = new GridDecimalColumn()
                                {
                                    Binding = cellBinding
                                };
                            }
                            else if (column.FieldType == RecordFieldType.Double)
                            {
                                dataGridField = new GridDoubleColumn()
                                {
                                    Binding = cellBinding
                                };
                            }
                            else if (column.FieldType == RecordFieldType.Money)
                            {
                                dataGridField = new GridMoneyColumn()
                                {
                                    Binding = cellBinding
                                };
                            }
                            else if (column.FieldType == RecordFieldType.Url)
                            {
                                dataGridField = new GridUrlColumn()
                                {
                                    Binding = cellBinding
                                };
                            }
                            else if (column.FieldType == RecordFieldType.ActivityParty)
                            {
                                dataGridField = new GridActivityPartyColumn()
                                {
                                    Binding = cellBinding
                                };
                            }
                            else
                            {
                                dataGridField = new GridStringColumn()
                                {
                                    Binding = cellBinding
                                };
                            }
                            dataGridField.Header = column.FieldLabel;
                            dataGridField.Width  = new DataGridLength(column.WidthPart,
                                                                      DataGridLengthUnitType.Pixel);
                            var isFormReadonly = gridSectionViewModel.IsReadOnly;
                            var isWriteable    = gridSectionViewModel?.RecordService?.GetFieldMetadata(column.FieldName, gridSectionViewModel.RecordType).Createable == true ||
                                                 gridSectionViewModel?.RecordService?.GetFieldMetadata(column.FieldName, gridSectionViewModel.RecordType).Writeable == true;
                            dataGridField.IsReadOnly = isFormReadonly || !isWriteable;
                            var description          = gridSectionViewModel?.RecordService?.GetFieldMetadata(column.FieldName, gridSectionViewModel.RecordType).Description;
                            dynamicDataGrid.Columns.Add(dataGridField);
                        }
                        var dataGridBinding = new Binding
                        {
                            Path = new PropertyPath("GridRecords"),
                            Mode = BindingMode.TwoWay
                        };
                        dynamicDataGrid.SetBinding(ItemsControl.ItemsSourceProperty, dataGridBinding);
                        var selectedItemBinding = new Binding
                        {
                            Path = new PropertyPath("SelectedRow"),
                            Mode = BindingMode.TwoWay
                        };
                        dynamicDataGrid.SetBinding(Selector.SelectedItemProperty, selectedItemBinding);
                    });
                });
            }
        }
示例#17
0
        public BufferConverter Compile(MetadataIdentity metadata, ColumnMetadata columnInfo)
        {
            IBindingMetadata binding = metadata.Lookup <IBindingMetadata>();

            ParameterExpression inputParam     = Expression.Parameter(typeof(object));
            ParameterExpression helperParam    = Expression.Parameter(typeof(object));
            ParameterExpression helperVariable = this.GetHelperVariable(binding);

            Expression value = inputParam;

            if (binding != null)
            {
                Type sourceType = null;

                if (columnInfo != null)
                {
                    BindingColumnInfo bindingColumnInfo = new BindingColumnInfo()
                    {
                        Column    = columnInfo,
                        CanBeNull = true,
                        Metadata  = binding,
                    };

                    sourceType = binding.Value?.Read(bindingColumnInfo)?.ReturnType;
                }

                BindingValueInfo valueInfo = new BindingValueInfo()
                {
                    CanBeNull   = true,
                    CanBeDbNull = true,
                    Metadata    = binding,
                    Value       = value,
                    SourceType  = sourceType,
                    TargetType  = binding.Type,
                    Helper      = helperVariable,
                };

                try
                {
                    value = binding.Value?.Convert?.Invoke(valueInfo) ?? inputParam;
                }
                catch (BindingException)
                {
                    throw;
                }
                catch (Exception ex)
                {
                    throw BindingException.InvalidCast(binding, ex);
                }
            }

            value = this.GetObjectExpression(value);

            if (helperVariable != null)
            {
                Expression typedParam   = Expression.Convert(helperParam, helperVariable.Type);
                Expression assignHelper = Expression.Assign(helperVariable, typedParam);

                value = Expression.Block(new[] { helperVariable }, assignHelper, value);
            }

            BufferInternalConverter innerFunc = Expression.Lambda <BufferInternalConverter>(value, inputParam, helperParam).Compile();

            object helperObject = binding?.Helper?.Object;

            return(value => innerFunc(value, helperObject));
        }
示例#18
0
        private GameObject CreateCloudPoint(List <float[]> columnDataList, string file_path = null, bool isJSON = false, string json_path = null)
        {
            GameObject container = Instantiate(_cloudPointPrefab) as GameObject;      /// GameObject that is the parent of the CloudPoint (used for CloudParent offset)
            GameObject root      = container.transform.Find("CloudPoint").gameObject; /// GameObject where the mesh will be displayed

            // Init Cloud Status and references
            CloudData rootdata = root.GetComponent <CloudData>();

            rootdata.columnData = columnDataList;

            if (isJSON && json_path != null)
            {
                LoadJSON(json_path, rootdata);
            }
            else
            {
                int[] intarray = new int[9] {
                    0, 0, 0, 0, 0, 0, 0, 0, 0
                };
                for (int i = 0; i < columnDataList.Count; i++)
                {
                    if (i < intarray.Length)
                    {
                        intarray[i] = i;
                    }
                }

                rootdata.globalMetaData.displayCollumnsConfiguration = intarray;
            }

            for (int j = 0; j < columnDataList.Count; j++)
            {
                ColumnMetadata metadata = new ColumnMetadata();
                metadata.ColumnID     = j;
                metadata.MinValue     = Mathf.Infinity;
                metadata.MaxValue     = Mathf.NegativeInfinity;
                metadata.Range        = 0;
                metadata.MinThreshold = 0;
                metadata.MaxThreshold = 0;
                rootdata.globalMetaData.columnMetaDataList.Add(metadata);
            }

            for (int i = 0; i < columnDataList[0].Length; i++)
            {
                rootdata.CreatePointData(i, Vector3.zero, Vector3.zero, 0f, 0f, 0f, Color.black, 0f);

                rootdata.CreatePointMetaData(i, 0);

                for (int j = 0; j < columnDataList.Count; j++)
                {
                    float nbr = columnDataList[j][i];
                    if (nbr < rootdata.globalMetaData.columnMetaDataList[j].MinValue)
                    {
                        rootdata.globalMetaData.columnMetaDataList[j].MinValue = nbr;
                    }

                    if (nbr > rootdata.globalMetaData.columnMetaDataList[j].MaxValue)
                    {
                        rootdata.globalMetaData.columnMetaDataList[j].MaxValue = nbr;
                    }
                }
                foreach (ColumnMetadata md in rootdata.globalMetaData.columnMetaDataList)
                {
                    md.MaxThreshold = md.MaxValue;
                    md.MinThreshold = md.MinValue;
                    md.Range        = md.MaxValue - md.MinValue;
                }
            }

            LoadCloudData(rootdata, file_path, isJSON);

            root.name = "CloudPoint";
            root.transform.position   = container.transform.position;
            root.transform.localScale = new Vector3(1, 1, 1);

            CloudBox box = root.AddComponent <CloudBox>();

            box.Activate();


            container.GetComponent <CloudObjectRefference>().cloud = root;
            return(root);
        }
示例#19
0
 /// <summary>
 /// Initializes a new instance of the IndexColumnMetadata class.
 /// </summary>
 /// <param name="column">The underlying column details.</param>
 /// <param name="isDescending">Indicates the column is indexed in descending order.</param>
 /// <param name="isIncluded">Indicates the column is an unindexed, included column.</param>
 /// <param name="indexId"></param>
 internal SqlServerIndexColumnMetadata(ColumnMetadata <SqlDbType> column, bool?isDescending, bool isIncluded, int indexId) : base(column, isDescending, isIncluded)
 {
     IndexId = indexId;
 }
        SqlServerTableOrView <TObject> OnGetByKey <TObject, TKey>(SqlServerObjectName tableName, ColumnMetadata <SqlDbType> columnMetadata, TKey key)
            where TObject : class
        {
            var where = columnMetadata.SqlName + " = @Param0";

            var parameters = new List <SqlParameter>();
            var param      = new SqlParameter("@Param0", key);

            if (columnMetadata.DbType.HasValue)
            {
                param.SqlDbType = columnMetadata.DbType.Value;
            }
            parameters.Add(param);

            return(new SqlServerTableOrView <TObject>(this, tableName, where, parameters));
        }
示例#21
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ColumnPropertyMap{TDbType}"/> class.
 /// </summary>
 /// <param name="column">The column.</param>
 /// <param name="property">The property.</param>
 public ColumnPropertyMap(ColumnMetadata <TDbType> column, PropertyMetadata property)
 {
     Column   = column;
     Property = property;
 }
示例#22
0
 /// <inheritdoc/>
 protected override ValueGenerateBase GetValueGenerator(ColumnMetadata column) => column.GeneratedForInsert;
示例#23
0
 /// <summary>
 /// 根据列元数据获取成员语句。
 /// </summary>
 /// <param name="metadata">列元数据。</param>
 /// <returns>成员语句。</returns>
 public virtual IMemberFragment GetMember(ColumnMetadata metadata) => GetMember(metadata.Member);
    public void Validate(ICustomAutoGeneratedServiceInfo customAutoGeneratedServiceInfo)
    {
        _repositoryInterfaceType = customAutoGeneratedServiceInfo.ImplementedInterface;

        if (!_repositoryInterfaceType.IsInterface)
        {
            throw new Exception($"The repository class should be an interface. The class is '{_repositoryInterfaceType.FullName}'.");
        }

        if (_repositoryInterfaceType.GetInterfaces().Length > 0)
        {
            throw new Exception($"The repository interface'{_repositoryInterfaceType.FullName}' cannot have base interfaces.");
        }

        var attribute = _repositoryInterfaceType.GetCustomAttributes().FirstOrDefault(x => x.GetType() == typeof(DataRepositoryAttribute));

        if (attribute is not DataRepositoryAttribute dataRepositoryAttribute)
        {
            throw new Exception($"Attribute '{typeof(DataRepositoryAttribute)}' is missing in data repository '{_repositoryInterfaceType}'.");
        }

        if (_repositoryInterfaceType.GetProperties().ToList().Count > 0)
        {
            throw new Exception($"No properties are supported in repository interfaces that use attribute '{typeof(DataRepositoryAttribute)}'.");
        }

        _databaseEntityType = dataRepositoryAttribute.DatabaseEntityType;

        foreach (var methodInfo in _repositoryInterfaceType.GetMethods())
        {
            var attributes = methodInfo.GetCustomAttributes().ToList();

            if (attributes.Count == 0)
            {
                var validAttributeTypes = new Type[]
                {
                    typeof(RepositoryMethodMetadataForAddAttribute), typeof(RepositoryMethodMetadataForAddOrUpdateAttribute),
                    typeof(RepositoryMethodMetadataForDeleteAttribute), typeof(RepositoryMethodMetadataForSelectAttribute)
                };
                throw new Exception($"Only methods with one of the following attributes are supported in repository interface '{_repositoryInterfaceType}': {string.Join(",", validAttributeTypes.Select(x => x.FullName))}.");
            }

            foreach (var currentAttribute in attributes)
            {
                if (currentAttribute is RepositoryMethodMetadataForAddAttribute repositoryMethodMetadataForAddAttribute)
                {
                    ValidateRepositoryMethodSignature(methodInfo, new[] { _databaseEntityType }, new TypeInfo(_databaseEntityType));
                    _repositoryMethodMetadataForAdd.Add(new RepositoryMethodMetadata <RepositoryMethodMetadataForAddAttribute>(repositoryMethodMetadataForAddAttribute, methodInfo));
                }
                else if (currentAttribute is RepositoryMethodMetadataForAddOrUpdateAttribute repositoryMethodMetadataForAddOrUpdateAttribute)
                {
                    ValidateRepositoryMethodSignature(methodInfo, new[] { _databaseEntityType }, new TypeInfo(_databaseEntityType));
                    _repositoryMethodMetadataForAddOrUpdate.Add(new RepositoryMethodMetadata <RepositoryMethodMetadataForAddOrUpdateAttribute>(repositoryMethodMetadataForAddOrUpdateAttribute, methodInfo));
                }
                else if (currentAttribute is RepositoryMethodMetadataForDeleteAttribute repositoryMethodMetadataForDeleteAttribute)
                {
                    ValidateRepositoryMethodSignature(methodInfo, new[] { _databaseEntityType }, new TypeInfo("System", "Void"));
                    _repositoryMethodMetadataForDelete.Add(new RepositoryMethodMetadata <RepositoryMethodMetadataForDeleteAttribute>(repositoryMethodMetadataForDeleteAttribute, methodInfo));
                }
                else if (currentAttribute is RepositoryMethodMetadataForSelectAttribute repositoryMethodMetadataForSelectAttribute)
                {
                    if (repositoryMethodMetadataForSelectAttribute.IsSelectAll)
                    {
                        ValidateRepositoryMethodSignature(methodInfo, Type.EmptyTypes,
                                                          new TypeInfo("System.Collections.Generic", "IReadOnlyList`1",
                                                                       new List <Type>
                        {
                            _databaseEntityType
                        }));

                        _repositoryMethodMetadataForSelectAll.Add(new RepositoryMethodMetadata <RepositoryMethodMetadataForSelectAttribute>(repositoryMethodMetadataForSelectAttribute, methodInfo));
                    }
                    else
                    {
                        ValidateRepositoryMethodSignature(methodInfo, new Type[] { typeof(long) },
                                                          new TypeInfo(_databaseEntityType));
                        _repositoryMethodMetadataForSelectSingle.Add(new RepositoryMethodMetadata <RepositoryMethodMetadataForSelectAttribute>(repositoryMethodMetadataForSelectAttribute, methodInfo));
                    }
                }
                else
                {
                    throw new Exception($"Invalid attribute specified for repository interface '{_repositoryInterfaceType}'.");
                }
            }
        }

        attribute = _databaseEntityType.GetCustomAttributes().FirstOrDefault(x => x.GetType() == typeof(DatabaseEntityAttribute));

        _databaseEntityAttribute = attribute as DatabaseEntityAttribute;

        if (_databaseEntityAttribute == null)
        {
            throw new Exception($"Attribute '{typeof(DatabaseEntityAttribute)}' is missing in data repository entity class '{dataRepositoryAttribute.DatabaseEntityType}' in repository '{_repositoryInterfaceType}'.");
        }

        foreach (var propertyInfo in _databaseEntityType.GetProperties())
        {
            var attributes = propertyInfo.GetCustomAttributes();

            foreach (var currentAttribute in attributes)
            {
                if (currentAttribute is not ColumnAttribute columnAttribute)
                {
                    continue;
                }

                var columnMetadata = new ColumnMetadata(columnAttribute, propertyInfo);

                if (columnAttribute.IsKeyAttribute)
                {
                    if (_keyColumnMetadata == null)
                    {
                        _keyColumnMetadata = columnMetadata;
                    }
                    else
                    {
                        LogHelper.Context.Log.ErrorFormat("Only one key column attribute can be specified. Column {0} will not be used as  a key column. Entity type with multiple key columns: '{1}'.",
                                                          columnMetadata.ColumnName, _databaseEntityType);
                    }
                }

                _columnsMetadata.Add(columnMetadata);
            }
        }

        if (_keyColumnMetadata == null)
        {
            throw new Exception($"No key column was specified in database entity type '{_databaseEntityType}'.");
        }
    }
示例#25
0
 public IActionResult Post([FromBody] ColumnMetadata value) =>
 value switch
 {
     null => BadRequest(),
示例#26
0
        private void InitGraphTableColumn(Type parentType, ColumnMetadata columnMetadata, dynamic objectGraphType, QueryArguments queryArguments)
        {
            if (columnMetadata.IsJson)
            {
                objectGraphType.AddField(
                    new FieldType
                {
                    Type     = typeof(string).GetGraphTypeFromType(true),
                    Name     = columnMetadata.ColumnName,
                    Resolver = new JsonResolver(parentType, columnMetadata.ColumnName)
                }
                    );
                FillArguments(queryArguments, columnMetadata.ColumnName, columnMetadata.Type);
            }
            else if (columnMetadata.IsList) // incluye litas de cada objeto
            {
                try
                {
                    var queryThirdArguments = new QueryArguments
                    {
                        new QueryArgument <IntGraphType> {
                            Name = "first"
                        },
                        new QueryArgument <StringGraphType> {
                            Name = "orderBy"
                        },
                        new QueryArgument <StringGraphType> {
                            Name = "all"
                        },
                    };

                    var     listObjectGraph = GetInternalListInstances(columnMetadata, queryThirdArguments: queryThirdArguments);
                    var     inherateType    = typeof(CustomListResolver <>).MakeGenericType(new Type[] { columnMetadata.Type });
                    dynamic resolver        = Activator.CreateInstance(inherateType, new object[] { columnMetadata.Type, parentType, _httpContextAccessor, _accessor, _dbMetadata });

                    objectGraphType.AddField(new FieldType
                    {
                        Name         = $"{columnMetadata.ColumnName}",
                        ResolvedType = listObjectGraph,
                        Arguments    = queryThirdArguments,
                        Resolver     = resolver
                    });
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.ToString());
                    objectGraphType.Field(
                        GraphUtils.ResolveGraphType(columnMetadata.Type),
                        columnMetadata.ColumnName
                        );
                    FillArguments(queryArguments, columnMetadata.ColumnName, columnMetadata.Type);
                }
            }
            else if (typeof(IBaseModel).IsAssignableFrom(columnMetadata.Type) ||
                     _dbMetadata.GetTableMetadatas().Any(x => x.Type == columnMetadata.Type))
            {
                var queryThirdArguments = new QueryArguments
                {
                    new QueryArgument <StringGraphType> {
                        Name = "all"
                    }
                };
                var metaTable = _dbMetadata.GetTableMetadatas().FirstOrDefault(x => x.Type.Name == columnMetadata.Type.Name);
                var tableType = GetThirdGraphType(metaTable, columnMetadata, queryThirdArguments);

                objectGraphType.AddField(new FieldType
                {
                    Name         = $"{columnMetadata.ColumnName}",
                    ResolvedType = tableType,
                    Arguments    = queryThirdArguments
                });
            }
            else if (columnMetadata.Type == typeof(Point) ||
                     columnMetadata.Type == typeof(Coordinate) ||
                     columnMetadata.Type == typeof(LineString) ||
                     columnMetadata.Type == typeof(Polygon) ||
                     columnMetadata.Type == typeof(MultiLineString))
            {
                objectGraphType.AddField(
                    new FieldType
                {
                    Type     = typeof(string).GetGraphTypeFromType(true),
                    Name     = columnMetadata.ColumnName,
                    Resolver = new PointResolver(parentType, columnMetadata.ColumnName)
                }
                    );
                FillArguments(queryArguments, columnMetadata.ColumnName, columnMetadata.Type);
            }
            else if (columnMetadata.Type == typeof(TimeSpan))
            {
                objectGraphType.AddField(
                    new FieldType
                {
                    Type     = typeof(string).GetGraphTypeFromType(true),
                    Name     = columnMetadata.ColumnName,
                    Resolver = new TimeSpanResolver(parentType, columnMetadata.ColumnName)
                }
                    );
                FillArguments(queryArguments, columnMetadata.ColumnName, columnMetadata.Type);
            }
            else
            {
                objectGraphType.Field(
                    GraphUtils.ResolveGraphType(columnMetadata.Type),
                    columnMetadata.ColumnName
                    );
                FillArguments(queryArguments, columnMetadata.ColumnName, columnMetadata.Type);

                if (columnMetadata.Type.IsEnum)
                {
                    FillArguments(queryArguments, $"{columnMetadata.ColumnName}_enum", typeof(int));
                    objectGraphType.AddField(
                        new FieldType
                    {
                        Type     = typeof(int).GetGraphTypeFromType(true),
                        Name     = $"{columnMetadata.ColumnName}_value",
                        Resolver = new EnumResolver(parentType, columnMetadata.ColumnName)
                    }
                        );
                }
            }
        }
示例#27
0
        //protected override IEnumerable<ICatalog> GetCatalogs()
        //{
        //    if (catalog == null)
        //    {
        //        catalog = this.InitializeCatalog();
        //    }

        //    return new List<ICatalog>() {catalog};
        //}

        ICatalog InitializeCatalog()
        {
            ICatalog catalog = new Catalog(this);

            catalog.CatalogName = "WikipediaData";
            //catalog.ConnectionString = ConnectionString;
            catalog.ConnectionType  = ConnectionTypes.S3;
            catalog.CatalogMetadata = new CatalogMetadata(catalog);

            ITableMetadata tableMetadata = new TableMetadata(catalog.CatalogMetadata);

            tableMetadata.DataType                   = typeof(WikipediaHourlyPageStats);
            tableMetadata.ModField                   = "PrimaryKey";
            tableMetadata.PrimaryKey                 = "PrimaryKey";
            tableMetadata.ReferenceTable             = false;
            tableMetadata.SaturationFrequency        = 30000;
            tableMetadata.SaturationPurgeField       = "RecordedOn";
            tableMetadata.SaturationPurgeOperation   = PurgeOperations.PURGE_OP_SMALLEST;
            tableMetadata.SaturationPurgePercent     = 5;
            tableMetadata.SaturationPurgeType        = typeof(DateTime);
            tableMetadata.SaturationUpdateField      = "RecordedOn";
            tableMetadata.SaturationUpdateComparator = Comparators.GREATER_THAN_EQUAL_TO;
            tableMetadata.SaturationUpdateType       = typeof(DateTime);
            tableMetadata.TableName                  = "PageStats";

            ColumnMetadata col;

            col = new ColumnMetadata(tableMetadata)
            {
                ColumnName      = "Id",
                ColumnType      = typeof(Int64),
                FieldMapping    = "PrimaryKey",
                Nullable        = false,
                ColumnLength    = 0,
                ColumnPrecision = 0,
                Visible         = true
            };
            tableMetadata.ColumnsMetadata.Add(col.ColumnName, col);

            col = new ColumnMetadata(tableMetadata)
            {
                ColumnName      = "RecordedOn",
                ColumnType      = typeof(DateTime),
                FieldMapping    = "RecordedOn",
                Nullable        = false,
                ColumnLength    = 0,
                ColumnPrecision = 0,
                Visible         = true
            };
            tableMetadata.ColumnsMetadata.Add(col.ColumnName, col);

            col = new ColumnMetadata(tableMetadata)
            {
                ColumnName      = "ProjectCode",
                ColumnType      = typeof(string),
                FieldMapping    = "ProjectCode",
                Nullable        = false,
                ColumnLength    = 0,
                ColumnPrecision = 0,
                Visible         = true
            };
            tableMetadata.ColumnsMetadata.Add(col.ColumnName, col);

            col = new ColumnMetadata(tableMetadata)
            {
                ColumnName      = "PageName",
                ColumnType      = typeof(string),
                FieldMapping    = "PageName",
                Nullable        = false,
                ColumnLength    = 0,
                ColumnPrecision = 0,
                Visible         = true
            };
            tableMetadata.ColumnsMetadata.Add(col.ColumnName, col);

            col = new ColumnMetadata(tableMetadata)
            {
                ColumnName      = "PageViews",
                ColumnType      = typeof(Int32),
                FieldMapping    = "PageViews",
                Nullable        = false,
                ColumnLength    = 0,
                ColumnPrecision = 0,
                Visible         = true
            };
            tableMetadata.ColumnsMetadata.Add(col.ColumnName, col);

            col = new ColumnMetadata(tableMetadata)
            {
                ColumnName      = "PageSizeKB",
                ColumnType      = typeof(Int32),
                FieldMapping    = "PageSizeKB",
                Nullable        = false,
                ColumnLength    = 0,
                ColumnPrecision = 0,
                Visible         = true
            };
            tableMetadata.ColumnsMetadata.Add(col.ColumnName, col);

            catalog.CatalogMetadata.Tables.Add(tableMetadata.TableName, tableMetadata);
            return(catalog);
        }
示例#28
0
        private dynamic GetFourthGraphType(TableMetadata metaTable, ColumnMetadata columnMetadata, QueryArguments queryArguments, bool isList = false)
        {
            string  key = $"Fourth_{columnMetadata.Type.Name}";
            dynamic objectGraphInternal = null;
            dynamic listGraphType       = null;

            if ((isList && !_tableNameLookup.ExistListGraphType(key + "_list")) || (!isList && !_tableNameLookup.ExistGraphType(key)))
            {
                var inherateType = typeof(ObjectGraphType <>).MakeGenericType(new Type[] { metaTable.Type });
                objectGraphInternal      = Activator.CreateInstance(inherateType);
                objectGraphInternal.Name = key;

                if (isList)
                {
                    var inherateListType = typeof(ListGraphType <>).MakeGenericType(new Type[] { objectGraphInternal.GetType() });
                    listGraphType = Activator.CreateInstance(inherateListType);
                    listGraphType.ResolvedType = objectGraphInternal;
                }

                foreach (var tableColumn in metaTable.Columns)
                {
                    if (tableColumn.Type == typeof(TimeSpan))
                    {
                        objectGraphInternal.AddField(
                            new FieldType
                        {
                            Type     = typeof(string).GetGraphTypeFromType(true),
                            Name     = tableColumn.ColumnName,
                            Resolver = new TimeSpanResolver(metaTable.Type, tableColumn.ColumnName)
                        }
                            );
                        FillArguments(queryArguments, tableColumn.ColumnName, tableColumn.Type);
                    }
                    else
                    {
                        objectGraphInternal.Field(
                            GraphUtils.ResolveGraphType(tableColumn.Type),
                            tableColumn.ColumnName
                            );
                        FillArguments(queryArguments, tableColumn.ColumnName, tableColumn.Type);
                        if (tableColumn.Type.IsEnum)
                        {
                            FillArguments(queryArguments, $"{tableColumn.ColumnName}_enum", typeof(int));
                            objectGraphInternal.AddField(
                                new FieldType
                            {
                                Type     = typeof(int).GetGraphTypeFromType(true),
                                Name     = $"{tableColumn.ColumnName}_value",
                                Resolver = new EnumResolver(metaTable.Type, tableColumn.ColumnName)
                            }
                                );
                        }
                    }
                }
            }
            else
            {
                foreach (var tableColumn in metaTable.Columns)
                {
                    FillArguments(queryArguments, tableColumn.ColumnName, tableColumn.Type);
                }
            }
            if (isList)
            {
                return(_tableNameLookup.GetOrInsertListGraphType(key + "_list", listGraphType));
            }
            return(_tableNameLookup.GetOrInsertGraphType(key, objectGraphInternal));
        }
示例#29
0
 public virtual string GetText(ColumnMetadata metadata)
 => GetText(metadata.Role, metadata.Type, metadata.Tolerance, metadata.Rounding);
示例#30
0
        public void RenderMessage_FullSamples_Correct()
        {
            var referenceTable = new DataTable()
            {
                TableName = "MyTable"
            };

            referenceTable.Columns.Add(new DataColumn("ForeignKey"));
            referenceTable.Columns.Add(new DataColumn("Numeric value"));
            referenceTable.LoadDataRow(new object[] { "Alpha", 15 }, false);
            referenceTable.LoadDataRow(new object[] { "Beta", 20 }, false);
            referenceTable.LoadDataRow(new object[] { "Delta", 30 }, false);
            referenceTable.LoadDataRow(new object[] { "Epsilon", 40 }, false);

            var candidateTable = new DataTable()
            {
                TableName = "MyTable"
            };

            candidateTable.Columns.Add(new DataColumn("ForeignKey"));
            candidateTable.Columns.Add(new DataColumn("Numeric value"));
            candidateTable.Columns.Add(new DataColumn("Boolean value"));
            candidateTable.LoadDataRow(new object[] { "Alpha", 10, true }, false);
            candidateTable.LoadDataRow(new object[] { "Gamma", 20, false }, false);

            var foreignKeyDefinition = new ColumnMetadata()
            {
                Identifier = new ColumnIdentifierFactory().Instantiate("ForeignKey"), Role = ColumnRole.Key
            };
            var numericDefinition = new ColumnMetadata()
            {
                Identifier = new ColumnIdentifierFactory().Instantiate("Numeric value"), Role = ColumnRole.Value
            };

            var keyMappings = new ColumnMappingCollection()
            {
                new ColumnMapping(foreignKeyDefinition.Identifier, ColumnType.Text)
            };
            var valueMappings = new ColumnMappingCollection()
            {
                new ColumnMapping(numericDefinition.Identifier, ColumnType.Numeric)
            };

            var violations = new LookupExistsViolationCollection(keyMappings);

            violations.Register(new KeyCollection(new[] { "Gamma" }), candidateTable.Rows[1]);

            var samplers = new Dictionary <string, ISampler <DataRow> >()
            {
                { "candidate", new FullSampler <DataRow>() },
                { "reference", new FullSampler <DataRow>() },
                { "analysis", new FullSampler <DataRow>() },
            };

            var message = new LookupReverseExistsViolationMessageJson(samplers);

            message.Generate(referenceTable.Rows.Cast <DataRow>(), candidateTable.Rows.Cast <DataRow>(), violations, keyMappings, valueMappings);

            var text = message.RenderMessage();

            Console.WriteLine(text);
            Assert.That(text, Is.StringContaining("\"expected\":{\"total-rows\":4,\"table\""));
            Assert.That(text, Is.StringContaining("\"actual\":{\"total-rows\":2,\"table\""));
            Assert.That(text, Is.StringContaining("\"analysis\":{\"missing\":{\"total-rows\":1,"));
            Assert.That(text, Is.StringContaining("[[\"Gamma\",\"20\",\"False\"]]"));
        }
示例#31
0
        public void RenderMessage_FullSamples_Correct()
        {
            var referenceTable = new DataTable()
            {
                TableName = "MyTable"
            };

            referenceTable.Columns.Add(new DataColumn("ForeignKey"));
            referenceTable.Columns.Add(new DataColumn("Numeric value"));
            referenceTable.LoadDataRow(new object[] { "Alpha", 15 }, false);
            referenceTable.LoadDataRow(new object[] { "Beta", 20 }, false);
            referenceTable.LoadDataRow(new object[] { "Delta", 30 }, false);

            var candidateTable = new DataTable()
            {
                TableName = "MyTable"
            };

            candidateTable.Columns.Add(new DataColumn("ForeignKey"));
            candidateTable.Columns.Add(new DataColumn("Numeric value"));
            candidateTable.Columns.Add(new DataColumn("Boolean value"));
            candidateTable.LoadDataRow(new object[] { "Alpha", 10, true }, false);
            candidateTable.LoadDataRow(new object[] { "Beta", 20, false }, false);

            var foreignKeyDefinition = new ColumnMetadata()
            {
                Identifier = new ColumnIdentifierFactory().Instantiate("ForeignKey"), Role = ColumnRole.Key
            };
            var numericDefinition = new ColumnMetadata()
            {
                Identifier = new ColumnIdentifierFactory().Instantiate("Numeric value"), Role = ColumnRole.Value
            };

            var keyMappings = new ColumnMappingCollection()
            {
                new ColumnMapping(foreignKeyDefinition.Identifier, ColumnType.Text)
            };
            var valueMappings = new ColumnMappingCollection()
            {
                new ColumnMapping(numericDefinition.Identifier, ColumnType.Numeric)
            };

            var information = new LookupMatchesViolationInformation(RowViolationState.Mismatch);

            information.AddCandidateRow(candidateTable.Rows[0]);
            information.CandidateRows.ElementAt(0).Records.Add(new LookupMatchesViolationRecord()
            {
                { candidateTable.Columns[1], new LookupMatchesViolationData(false, 15) },
            });
            var violations = new LookupMatchesViolationCollection(keyMappings, valueMappings)
            {
                { new KeyCollection(new[] { "Alpha" }), information }
            };

            var samplers = new Dictionary <string, ISampler <DataRow> >()
            {
                { "candidate", new FullSampler <DataRow>() },
                { "reference", new FullSampler <DataRow>() },
                { "analysis", new FullSampler <DataRow>() },
            };

            var message = new LookupMatchesViolationMessageJson(samplers);

            message.Generate(referenceTable.Rows.Cast <DataRow>(), candidateTable.Rows.Cast <DataRow>(), violations, keyMappings, valueMappings);

            var text = message.RenderMessage();

            Console.WriteLine(text);
            Assert.That(text, Is.StringContaining("\"expected\":{\"total-rows\":3,\"table\""));
            Assert.That(text, Is.StringContaining("\"actual\":{\"total-rows\":2,\"table\""));
            Assert.That(text, Is.StringContaining("\"analysis\":{\"non-matching\":{\"total-rows\":1,"));
            Assert.That(text, Is.StringContaining(",{\"value\":\"10\",\"expectation\":\"15\"},"));
        }