示例#1
0
        public ExtractorTest()
        {
            Random r = new Random();

            r.NextBytes(source);

            str = new InstantFigure(InstantFigureMocks.InstantFigure_MemberRubric_FieldsAndPropertiesModel(),
                                    "InstantFigure_MemberRubric_FieldsAndPropertiesModel_ValueType");
            FieldsAndPropertiesModel fom = new FieldsAndPropertiesModel();

            table = new InstantMultemic(str, "InstantMultemic_Compilation_Test");
            rctab = table.New();

            rcobj = rctab.NewFigure();

            foreach (var rubric in str.Rubrics.AsValues())
            {
                if (rubric.FigureFieldId > -1)
                {
                    var field = fom.GetType().GetField(rubric.FigureField.Name,
                                                       BindingFlags.NonPublic | BindingFlags.Instance);
                    if (field == null)
                    {
                        field = fom.GetType().GetField(rubric.RubricName);
                    }
                    if (field == null)
                    {
                        var prop = fom.GetType().GetProperty(rubric.RubricName);
                        if (prop != null)
                        {
                            rcobj[rubric.FigureFieldId] = prop.GetValue(fom);
                        }
                    }
                    else
                    {
                        rcobj[rubric.FigureFieldId] = field.GetValue(fom);
                    }
                }
            }

            for (int i = 0; i < 1000; i++)
            {
                IFigure nrcstr = rctab.NewFigure();
                nrcstr.ValueArray = rcobj.ValueArray;
                rctab.Add(i, nrcstr);
            }

            structBytes  = new byte[rctab.FigureSize];
            structBytes2 = new byte[rctab.FigureSize];

            rcobj.StructureTo(ref structBytes, 0);
        }
        public InstantMultemic DeckFromSchema(DataTable schema,
                                              IDeck <MemberRubric> operColumns,
                                              bool insAndDel = false)
        {
            List <MemberRubric> columns = new List <MemberRubric>(schema.Rows.Cast <DataRow>().AsEnumerable().AsQueryable()
                                                                  .Select(c => new MemberRubric(new FieldRubric(Type.GetType(c["DataType"].ToString()),
                                                                                                                c["ColumnName"].ToString(),
                                                                                                                Convert.ToInt32(c["ColumnSize"]),
                                                                                                                Convert.ToInt32(c["ColumnOrdinal"]))
            {
                RubricSize = Convert.ToInt32(c["ColumnSize"])
            })
            {
                FigureFieldId   = Convert.ToInt32(c["ColumnOrdinal"]),
                IsIdentity      = Convert.ToBoolean(c["IsIdentity"]),
                IsAutoincrement = Convert.ToBoolean(c["IsAutoincrement"]),
                IsDBNull        = Convert.ToBoolean(c["AllowDBNull"])
            }).ToList());
            List <MemberRubric> _columns = new List <MemberRubric>();

            if (insAndDel)
            {
                for (int i = 0; i < (int)(columns.Count / 2); i++)
                {
                    _columns.Add(columns[i]);
                }
            }
            else
            {
                _columns.AddRange(columns);
            }

            InstantFigure   rt   = new InstantFigure(_columns.ToArray(), "SchemaFigure");
            InstantMultemic tab  = new InstantMultemic(rt, "Schema");
            IMultemic       deck = tab.Collection;

            List <DbTable> dbtabs = DbHand.Schema.DataDbTables.List;

            MemberRubric[] pKeys = columns.Where(c => dbtabs.SelectMany(t => t.GetKeyForDataTable.Select(d => d.RubricName)).Contains(c.RubricName) && operColumns.Select(o => o.RubricName).Contains(c.RubricName)).ToArray();
            if (pKeys.Length > 0)
            {
                deck.Rubrics.KeyRubrics = new MemberRubrics(pKeys);
            }

            return(tab);
        }
        public MathlineTest()
        {
            instFig = new InstantFigure(typeof(MathlineMockModel).GetMembers().Select(m => m.MemberType == MemberTypes.Field ? m :
                                                                                      m.MemberType == MemberTypes.Property ? m :
                                                                                      null).Where(p => p != null).ToArray(),
                                        "InstantFigure_MemberRubric_FieldsAndPropertiesModel");

            instMtic = new InstantMultemic(instFig, "InstantMultemic_Mathline_Test");

            spcMtic = instMtic.New();

            MathlineMockModel fom = new MathlineMockModel();

            for (int i = 0; i < 250 * 1000; i++)
            {
                var f = Mathline_Figure_Helper_Test(spcMtic, fom);
                f["NetPrice"] = (double)f["NetPrice"] + i;
                f["NetCost"]  = (double)f["NetPrice"] / 2;
                spcMtic.Add((long)int.MaxValue + i, f);
            }
        }
        public InstantMultemic InjectRead(string tableName,
                                          IDeck <string> keyNames = null)
        {
            DataTable           schema  = dr.GetSchemaTable();
            List <MemberRubric> columns = new List <MemberRubric>(schema.Rows.Cast <DataRow>().AsEnumerable().AsQueryable()
                                                                  .Where(n => n["ColumnName"].ToString() != "SystemSerialCode").Select(c =>
                                                                                                                                       new MemberRubric(new FieldRubric(Type.GetType(c["DataType"].ToString()),
                                                                                                                                                                        c["ColumnName"].ToString(),
                                                                                                                                                                        Convert.ToInt32(c["ColumnSize"]),
                                                                                                                                                                        Convert.ToInt32(c["ColumnOrdinal"]))
            {
                RubricSize = Convert.ToInt32(c["ColumnSize"])
            })
            {
                FigureFieldId   = Convert.ToInt32(c["ColumnOrdinal"]),
                IsIdentity      = Convert.ToBoolean(c["IsIdentity"]),
                IsAutoincrement = Convert.ToBoolean(c["IsAutoincrement"]),
                IsDBNull        = Convert.ToBoolean(c["AllowDBNull"]),
            }
                                                                                                                                       ).ToList());

            InstantFigure   rt   = new InstantFigure(columns.ToArray(), tableName);
            InstantMultemic deck = new InstantMultemic(rt, tableName + "_Collection");
            IMultemic       tab  = deck.Collection;

            bool takeDbKeys = false;

            if (keyNames != null)
            {
                if (keyNames.Count > 0)
                {
                    foreach (var k in keyNames)
                    {
                        tab.Rubrics.KeyRubrics.Add(tab.Rubrics[k]);
                    }
                }
                else
                {
                    takeDbKeys = true;
                }
            }
            else
            {
                takeDbKeys = true;
            }

            if (takeDbKeys &&
                DbHand.Schema != null &&
                DbHand.Schema.DataDbTables.List.Count > 0)
            {
                List <DbTable> dbtabs = DbHand.Schema.DataDbTables.List;
                MemberRubric[] pKeys  = tab.Rubrics.AsValues()
                                        .Where(c => dbtabs.SelectMany(t =>
                                                                      t.GetKeyForDataTable.Select(d => d.RubricName))
                                               .Contains(c.RubricName)).ToArray();
                if (pKeys.Length > 0)
                {
                    foreach (var k in pKeys)
                    {
                        tab.Rubrics.KeyRubrics.Add(k);
                    }
                }
            }


            if (dr.Read())
            {
                int      columnsCount = dr.FieldCount;
                object[] itemArray    = new object[columnsCount];
                int[]    keyOrder     = tab.Rubrics.KeyRubrics.AsValues().Select(k => k.FigureFieldId).ToArray();

                do
                {
                    IFigure figure = tab.NewFigure();

                    dr.GetValues(itemArray);

                    figure.ValueArray = itemArray.Select((a, y) => itemArray[y] = (a == DBNull.Value) ? a.GetType().GetDefault() : a).ToArray();

                    figure.SystemSerialCode = new Ussn(keyOrder.Select(ko => itemArray[ko]).ToArray());

                    tab.Add(figure);
                }while (dr.Read());
                itemArray = null;
            }
            dr.Dispose();
            return(deck);
        }