Exemple #1
0
        public static ArrayDataRecord LoadRecord(BinaryReader fr, ITableStructure table)
        {
            var res = new ArrayDataRecord(table);

            for (int i = 0; i < table.Columns.Count; i++)
            {
                res.SeekValue(i);
                res.ReadValue(fr);
            }
            return(res);
        }
        public void PutRecord(IBedRecord record)
        {
            object[] values = new object[record.FieldCount];
            record.GetValues(values);
            IBedRecord input = new ArrayDataRecord(m_putFormat, values);
            IBedRecord trans = m_transform.Transform(input);

            m_queue.Put(new Element {
                Record = trans
            });
        }
Exemple #3
0
        public IBedRecord AdaptRecord(IBedRecord record, ILogger logger)
        {
            ArrayDataRecord res = new ArrayDataRecord(record.Structure);

            for (int i = 0; i < res.FieldCount; i++)
            {
                record.ReadValue(i);
                res.SeekValue(i);
                m_dda.AdaptValue(record, m_dstColTypes[i], res, m_outputConv, logger);
            }
            return(res);
        }
Exemple #4
0
        public static DataScript AlterFixedData(InMemoryTable oldData, InMemoryTable newData, InMemoryTableOperation ops, DbDiffOptions opts)
        {
            if (newData == null)
            {
                return(null);
            }
            IPrimaryKey newpk = newData.Structure.FindConstraint <IPrimaryKey>();

            if (newpk == null)
            {
                return(null);
            }
            string[]   newcolnames = newData.Structure.Columns.GetNames();
            DataScript script      = new DataScript();

            if (oldData == null)
            {
                foreach (var row in newData.Rows)
                {
                    script.Insert(newcolnames, row.GetValues());
                }
            }
            else
            {
                if (ops != null)
                {
                    oldData = new InMemoryTable(oldData, ops);
                }
                IPrimaryKey oldpk = oldData.Structure.FindConstraint <IPrimaryKey>();
                if (oldpk == null)
                {
                    return(null);
                }
                string[] newpkcols   = newpk.Columns.GetNames();
                string[] oldpkcols   = oldpk.Columns.GetNames();
                string[] newnopkcols = newData.Structure.GetNoPkColumns().GetNames();
                string[] oldnopkcols = oldData.Structure.GetNoPkColumns().GetNames();

                foreach (var row in newData.Rows)
                {
                    object[]        newpkvals = row.GetValuesByCols(newpkcols);
                    ArrayDataRecord oldrow    = oldData.FindRow(oldpkcols, newpkvals);
                    if (oldrow != null)
                    {
                        object[] oldnopkvals = oldrow.GetValuesByCols(oldnopkcols);
                        object[] newnopkvals = row.GetValuesByCols(newnopkcols);
                        if (BedTool.EqualRecords(oldnopkvals, newnopkvals))
                        {
                            continue;
                        }
                        // UPDATE
                        List <string> changedcols = new List <string>();
                        List <object> changedvals = new List <object>();
                        for (int i = 0; i < oldnopkcols.Length; i++)
                        {
                            if (!BedTool.EqualValues(oldnopkvals[i], newnopkvals[i]))
                            {
                                changedcols.Add(newnopkcols[i]);
                                changedvals.Add(newnopkvals[i]);
                            }
                        }
                        script.Update(newpkcols.ToArray(), newpkvals.ToArray(), changedcols.ToArray(), changedvals.ToArray());
                    }
                    else
                    {
                        script.Insert(newcolnames, row.GetValues());
                    }
                }
            }
            if (script.IsEmpty())
            {
                return(null);
            }
            return(script);
        }
Exemple #5
0
 internal void AddRowInternal(ArrayDataRecord rec)
 {
     Rows.AddInternal(new BedRow(this, rec, BedRowState.Unchanged, m_structure));
 }