示例#1
0
        public static void WriteQueueToXml(IDataQueue queue, Stream fw, string dbName, string tableName)
        {
            DataTable table = ConnTools.DataTableFromStructure(queue.GetRowFormat);

            table.TableName = tableName;

            List <string> fldnames = new List <string>();

            foreach (IColumnStructure col in queue.GetRowFormat.Columns)
            {
                fldnames.Add(col.ColumnName);
            }

            XmlWriter xw = XmlTextWriter.Create(fw, new XmlWriterSettings {
                Encoding = Encoding.UTF8, CheckCharacters = false
            });

            //XmlTextWriter xw = new XmlTextWriter(fw, Encoding.UTF8);
            //xw.Settings = new XmlWriterSettings { CheckCharacters = false };

            xw.WriteStartDocument();
            xw.WriteStartElement(dbName);
            // mono has bug in writing schema
            if (!Core.IsMono)
            {
                table.WriteXmlSchema(xw);
            }
            List <string> ids = new List <string>();

            foreach (IColumnStructure col in queue.GetRowFormat.Columns)
            {
                ids.Add(XmlTool.NormalizeIdentifier(col.ColumnName));
            }
            try
            {
                while (!queue.IsEof)
                {
                    IBedRecord row = queue.GetRecord();
                    xw.WriteStartElement(tableName);
                    for (int i = 0; i < row.FieldCount; i++)
                    {
                        row.ReadValue(i);
                        var type = row.GetFieldType();
                        if (type == TypeStorage.Null)
                        {
                            continue;
                        }
                        xw.WriteElementString(ids[i], XmlTool.ObjectToString(row.GetValue(i)));
                    }
                    xw.WriteEndElement();
                }
            }
            finally
            {
                queue.CloseReading();
            }
            xw.WriteEndElement();
            xw.WriteEndDocument();
            xw.Flush();
        }
示例#2
0
        public virtual void FillTable(ITableStructure table, IDataQueue queue, TableCopyOptions opts)
        {
            var  colnames = from c in queue.GetRowFormat.Columns select c.ColumnName;
            bool autoinc  = queue.GetRowFormat.FindAutoIncrementColumn() != null;

            if (autoinc)
            {
                m_dmp.AllowIdentityInsert(table.FullName, true);
            }
            try
            {
                while (!queue.IsEof)
                {
                    IBedRecord row = queue.GetRecord();
                    m_dmp.PutCmd("^insert ^into %f (%,i) ^values (%,v)", table, colnames, row);
                }
            }
            finally
            {
                queue.CloseReading();
            }
            if (autoinc)
            {
                m_dmp.AllowIdentityInsert(table.FullName, false);
            }
        }
示例#3
0
        public void WriteRecord(StreamWriter fw, ITableStructure table, IBedRecord record, int index, object manager)
        {
            var mgr = (Manager)manager;

            if (index > 0)
            {
                fw.Write(ProcessTemplate(RowSeparator));
            }
            fw.Write(ProcessTemplate(RowBegin));
            bool was = false;

            for (int i = 0; i < record.FieldCount; i++)
            {
                record.ReadValue(i);
                mgr.formatter.ReadFrom(record);
                if (was)
                {
                    fw.Write(ProcessTemplate(CellSeparator));
                }
                fw.Write(ProcessTemplate(CellBegin));
                string val = XmlTool.ObjectToString(mgr.formatter.GetText());
                fw.Write(ProcessTemplate(CellValue, "$[VALUE]", val, "$[NAME]", record.GetName(i)));
                fw.Write(ProcessTemplate(CellEnd));
                was = true;
            }
            fw.Write(ProcessTemplate(RowEnd));
        }
示例#4
0
            internal void SaveRecord(IBedRecord rec)
            {
                long pos0 = Data.Length;

                BedTool.SaveRecord(rec.FieldCount, rec, m_writer);
                Lengths.Add((int)(Data.Length - pos0));
            }
示例#5
0
 public IBedRecord GetRecord()
 {
     try
     {
         Element res = m_queue.Get();
         if (res.IsEof)
         {
             throw new Exception("DAE-00223 Eof reached");
         }
         IBedRecord rec = res.Record;
         foreach (var ada in m_outputAdapters)
         {
             rec = ada.AdaptRecord(rec, ProgressInfo);
         }
         return(rec);
     }
     catch (QueueClosedError)
     {
         if (m_error != null)
         {
             throw new QueueClosedError("DAE-00224", m_error);
         }
         throw new QueueClosedError("DAE-00225");
     }
 }
示例#6
0
 internal BedRow(BedTable table, IBedRecord original, BedRowState initialState, ITableStructure structure)
 {
     m_table     = table;
     m_fields    = new FieldRec[m_table.Structure.Columns.Count];
     m_original  = original;
     m_structure = structure;
     RowState    = initialState;
 }
示例#7
0
 public static string[] GetFieldNames(this IBedRecord record)
 {
     string[] res = new string[record.FieldCount];
     for (int i = 0; i < res.Length; i++)
     {
         res[i] = record.GetName(i);
     }
     return(res);
 }
示例#8
0
 public override IBedRecord Transform(IBedRecord record)
 {
     object[] values = new object[m_target.Columns.Count];
     for (int i = 0; i < m_dstIndexes.Count; i++)
     {
         values[i] = record.GetValue(m_dstIndexes[i]);
     }
     return(new ArrayDataRecord(m_target, values));
 }
示例#9
0
 public static object[] GetValuesByCols(this IBedRecord record, int[] cols)
 {
     object[] values = new object[cols.Length];
     for (int i = 0; i < cols.Length; i++)
     {
         values[i] = record.GetValue(cols[i]);
     }
     return(values);
 }
示例#10
0
        protected override void RunBulkCopy(IDataQueue queue)
        {
            int           okRowCount = 0, failRowCount = 0;
            List <string> insertErrors = new List <string>();

            ITableStructure dst = queue.GetRowFormat;

            var           conn    = (NpgsqlConnection)Connection.SystemConnection;
            NpgsqlCommand command = new NpgsqlCommand(Connection.Dialect.GenerateScript(d => d.Put("^copy %f (%,i) ^from ^stdin", DestinationTable.FullName, from c in dst.Columns select c.ColumnName)), conn);
            NpgsqlCopyIn  cin     = new NpgsqlCopyIn(command, conn);

            try
            {
                cin.Start();
                var fw = new BinaryWriter(cin.CopyStream);
                while (!queue.IsEof)
                {
                    IBedRecord rec = queue.GetRecord();
                    for (int i = 0; i < rec.FieldCount; i++)
                    {
                        if (i > 0)
                        {
                            fw.Write((byte)'\t');
                        }
                        rec.ReadValue(i);
                        WriteField(rec, fw);
                    }
                    fw.Write((byte)'\r');
                    fw.Write((byte)'\n');
                    okRowCount++;
                }
                fw.Flush();
                cin.End();
            }
            catch (Exception err)
            {
                cin.Cancel("canceled");
                ProgressInfo.LogMessageDetail(
                    "INSERT", DatAdmin.LogLevel.Error,
                    String.Format("{0}", Texts.Get("s_error_inserting_into_table$table", "table", DestinationTable.FullName)), err.ToString());
                throw;
            }

            if (failRowCount > 0)
            {
                ProgressInfo.LogMessageDetail(
                    "INSERT", DatAdmin.LogLevel.Error,
                    String.Format("{0}, OK:{1}, FAIL:{2}", Texts.Get("s_error_inserting_into_table$table", "table", DestinationTable.FullName), okRowCount, failRowCount),
                    insertErrors.CreateDelimitedText("\r\n")
                    );
            }
            else
            {
                ProgressInfo.LogMessage("INSERT", DatAdmin.LogLevel.Info, Texts.Get("s_inserted_into_table$table$rows", "table", DestinationTable.FullName, "rows", okRowCount));
            }
        }
示例#11
0
        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
            });
        }
示例#12
0
        private List <string> DoCreateUpdateQuery(string askquery)
        {
            // buffer for update command
            var dh  = CreateHolderDumper();
            var dmp = dh.Dumper;

            using (var cmd = m_syn.m_source.Connection.SystemConnection.CreateCommand())
            {
                cmd.CommandText = askquery;

                using (IBedReader reader = m_syn.m_source.GetAnyDDA().AdaptReader(cmd.ExecuteReader()))
                {
                    while (reader.Read())
                    {
                        IBedRecord rec = reader;
                        foreach (var recada in m_outputAdapters)
                        {
                            rec = recada.AdaptRecord(rec, m_syn.Progress);
                        }

                        dmp.Put("update %f set ", m_item.Target.Table);
                        for (int i = 0; i < m_dstInfo.DataCols.Length; i++)
                        {
                            rec.ReadValue(i + m_dstInfo.KeyCols.Length);
                            if (i > 0)
                            {
                                dmp.Put(", ");
                            }
                            dmp.Put("%i=%v", m_dstInfo.DataCols[i], rec);
                        }
                        dmp.Put(" where ");
                        for (int i = 0; i < m_dstInfo.KeyCols.Length; i++)
                        {
                            if (i > 0)
                            {
                                dmp.Put(" and ");
                            }
                            rec.ReadValue(i);
                            if (rec.GetFieldType() == TypeStorage.Null)
                            {
                                dmp.Put("%i ^is ^null", m_dstInfo.KeyCols[i]);
                            }
                            else
                            {
                                dmp.Put("%i=%v", m_dstInfo.KeyCols[i], rec);
                            }
                        }
                        dmp.EndCommand();
                    }
                }
            }
            return(dh.Scripts);
        }
示例#13
0
        public override void FillTable(ITableStructure table, IDataQueue queue, TableCopyOptions opts)
        {
            var  colnames = from c in queue.GetRowFormat.Columns select c.ColumnName;
            bool autoinc  = queue.GetRowFormat.FindAutoIncrementColumn() != null;

            if (autoinc)
            {
                m_dmp.AllowIdentityInsert(table.FullName, true);
            }

            try
            {
                if (Cfg != null && Cfg.JoinInserts)
                {
                    int rowsInBatch = 0;
                    while (!queue.IsEof)
                    {
                        if (Cfg.BatchLimit > 0 && rowsInBatch >= Cfg.BatchLimit)
                        {
                            m_dmp.EndCommand();
                            rowsInBatch = 0;
                        }
                        if (rowsInBatch > 0)
                        {
                            m_dmp.Put(";\n");
                        }
                        IBedRecord row = queue.GetRecord();
                        m_dmp.Put("^insert ^into %f (%,i) ^values (%,v)", table, colnames, row);
                        rowsInBatch++;
                    }
                    if (rowsInBatch > 0)
                    {
                        m_dmp.EndCommand();
                    }
                }
                else
                {
                    while (!queue.IsEof)
                    {
                        IBedRecord row = queue.GetRecord();
                        m_dmp.PutCmd("^insert ^into %f (%,i) ^values (%,v)", table, colnames, row);
                    }
                }
            }
            finally
            {
                queue.CloseReading();
            }
            if (autoinc)
            {
                m_dmp.AllowIdentityInsert(table.FullName, false);
            }
        }
示例#14
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);
        }
示例#15
0
        public static void WriteQueueToStream(IDataQueue queue, Stream fw, BedDataStats stats)
        {
            BinaryWriter bw = new BinaryWriter(fw);

            bw.Write(SIGNATURE);
            bw.Write((int)2); // version
            var ts = queue.GetRowFormat;

            bw.Write7BitEncodedInt(ts.Columns.Count);

            var pk = ts.FindConstraint <IPrimaryKey>();

            foreach (IColumnStructure col in ts.Columns)
            {
                bw.Write(col.ColumnName);
                bw.Write((byte)col.DataType.DefaultStorage);
                ColFlags flags = 0;
                if (pk != null && pk.Columns.IndexOfIf(c => c.ColumnName == col.ColumnName) >= 0)
                {
                    flags |= ColFlags.ISPK;
                }
                bw.Write((byte)flags);
            }

            MemoryStream rowdata = new MemoryStream();
            BinaryWriter bwrow   = new BinaryWriter(rowdata);

            try
            {
                while (!queue.IsEof)
                {
                    rowdata.Position = 0;
                    rowdata.SetLength(0);
                    IBedRecord row = queue.GetRecord();
                    BedTool.SaveRecord(ts.Columns.Count, row, bwrow);
                    bw.Write7BitEncodedInt((int)rowdata.Length);
                    rowdata.WriteTo(bw.BaseStream);
                    if (stats != null)
                    {
                        stats.Rows++;
                        stats.Bytes += (int)rowdata.Length;
                        stats.Bytes += 4;
                    }
                }
            }
            finally
            {
                queue.CloseReading();
            }
            // write EOF mark
            bw.Write7BitEncodedInt(-1);
        }
示例#16
0
 private void ProcessRecord(IBedRecord record, TemplateEnviroment env, int index)
 {
     if (index > 0 && m_separ != null)
     {
         m_separ.Run(env);
     }
     m_engine.Globals["_row_"] = record;
     for (int fi = 0; fi < record.FieldCount; fi++)
     {
         m_engine.Globals["_" + record.GetName(fi).ToLower() + "_"] = record.GetValue(fi).SafeToString();
     }
     m_body.Run(env);
 }
示例#17
0
        private void DoFillOnBackground(IDataQueue queue)
        {
            try
            {
                m_state = TabularDataViewState.Loading;
                //DataTable curbuf = null;
                Chunk curchunk = null;
                try
                {
                    while (!queue.IsEof)
                    {
                        if (curchunk == null)
                        {
                            curchunk = new Chunk();
                        }

                        IBedRecord rec = queue.GetRecord();
                        curchunk.SaveRecord(rec);

                        if (curchunk.Count >= BUFFER_SIZE)
                        {
                            FlushChunk(curchunk);
                            curchunk = null;
                        }
                    }
                }
                finally
                {
                    queue.CloseReading();
                }
                if (curchunk != null)
                {
                    FlushChunk(curchunk);
                }
                m_state = TabularDataViewState.Prepared;
            }
            catch (Exception e)
            {
                Errors.Report(e);
                m_state = TabularDataViewState.Error;
                queue.PutError(e);
            }
            finally
            {
                queue.CloseWriting();
            }
            if (LoadedNextData != null)
            {
                LoadedNextData(this, new LoadedNextDataArgs(m_serializedRows));
            }
        }
示例#18
0
 public static object[] GetValuesByCols(this IBedRecord record, DmlfColumnRef[] cols, DmlfResultFieldCollection result)
 {
     if (result == null)
     {
         return(record.GetValuesByCols(cols.GetNames()));
     }
     object[] values = new object[cols.Length];
     for (int i = 0; i < cols.Length; i++)
     {
         int index = result.GetColumnIndex(cols[i]);
         values[i] = record.GetValue(index);
     }
     return(values);
 }
示例#19
0
        private void ProcessRecord(IDatabaseSource db, IBedRecord record)
        {
            string filename = FileNameTemplate;
            Dictionary <string, string> vars     = new Dictionary <string, string>();
            Dictionary <string, object> extnames = new Dictionary <string, object>();

            for (int fi = 0; fi < record.FieldCount; fi++)
            {
                vars["#" + record.GetName(fi).ToUpper() + "#"]     = record.GetValue(fi).SafeToString();
                extnames["_" + record.GetName(fi).ToUpper() + "_"] = record.GetValue(fi).SafeToString();
            }
            filename = filename.ReplaceAll(vars);
            WriteContent(db, filename, vars, extnames);
        }
示例#20
0
        //public static void SaveField(IDataRecord record, int index, BinaryWriter stream)
        //{
        //    if (record.IsDBNull(index))
        //    {
        //        stream.Write((byte)TypeStorage.Null);
        //        return;
        //    }
        //    Type type = record.GetFieldType(index);
        //    try
        //    {
        //        switch (Type.GetTypeCode(type))
        //        {
        //            case TypeCode.Boolean:
        //                {
        //                    bool val = record.GetBoolean(index);
        //                    stream.Write((byte)TypeStorage.Boolean);
        //                    stream.Write(val);
        //                }
        //                break;
        //            case TypeCode.Byte:
        //                {
        //                    byte val = record.GetByte(index);
        //                    stream.Write((byte)TypeStorage.Byte);
        //                    stream.Write(val);
        //                }
        //                break;
        //            case TypeCode.Int16:
        //                {
        //                    short val = record.GetInt16(index);
        //                    stream.Write((byte)TypeStorage.Int16);
        //                    stream.Write(val);
        //                }
        //                break;
        //            case TypeCode.Int32:
        //                {
        //                    int val = record.GetInt32(index);
        //                    stream.Write((byte)TypeStorage.Int32);
        //                    stream.Write(val);
        //                }
        //                break;
        //            case TypeCode.Int64:
        //                {
        //                    long val = record.GetInt64(index);
        //                    stream.Write((byte)TypeStorage.Int64);
        //                    stream.Write(val);
        //                }
        //                break;
        //            case TypeCode.DateTime:
        //                {
        //                    DateTime val = record.GetDateTime(index);
        //                    stream.Write((byte)TypeStorage.DateTime);
        //                    stream.Write(val.ToBinary());
        //                }
        //                break;
        //            case TypeCode.Decimal:
        //                {
        //                    decimal val = record.GetDecimal(index);
        //                    stream.Write((byte)TypeStorage.Decimal);
        //                    stream.Write(val);
        //                }
        //                break;
        //            case TypeCode.Single:
        //                {
        //                    float val = record.GetFloat(index);
        //                    stream.Write((byte)TypeStorage.Float);
        //                    stream.Write(val);
        //                }
        //                break;
        //            case TypeCode.Double:
        //                {
        //                    double val = record.GetDouble(index);
        //                    stream.Write((byte)TypeStorage.Double);
        //                    stream.Write(val);
        //                }
        //                break;
        //            case TypeCode.String:
        //                {
        //                    string val = record.GetString(index);
        //                    stream.Write((byte)TypeStorage.String);
        //                    stream.Write(val);
        //                }
        //                break;
        //            default:
        //                if (type == typeof(Guid))
        //                {
        //                    Guid val = record.GetGuid(index);
        //                    stream.Write((byte)TypeStorage.Guid);
        //                    stream.Write(val.ToByteArray());
        //                }
        //                else if (type == typeof(byte[]))
        //                {
        //                    byte[] val = (byte[])record.GetValue(index);
        //                    stream.Write((byte)TypeStorage.ByteArray);
        //                    stream.Write7BitEncodedInt(val.Length);
        //                    stream.Write(val);
        //                }
        //                else
        //                {
        //                    // serialize as string
        //                    string val = record.GetValue(index).ToString();
        //                    stream.Write((byte)TypeStorage.String);
        //                    stream.Write(val);
        //                }
        //                break;
        //        }
        //    }
        //    catch
        //    {
        //        try
        //        {
        //            object val = record[index];
        //            // try to write boxed value (not very effective)
        //            SaveField(val, stream);
        //        }
        //        catch
        //        {
        //            string val = record.GetString(index);
        //            stream.Write((byte)TypeStorage.String);
        //            stream.Write(val);
        //        }
        //    }
        //}

        //public static void SaveField(object value, BinaryWriter stream)
        //{
        //    if (value == null || value == DBNull.Value)
        //    {
        //        stream.Write((byte)TypeStorage.Null);
        //        return;
        //    }
        //    Type type = value.GetType();
        //    switch (Type.GetTypeCode(type))
        //    {
        //        case TypeCode.Boolean:
        //            {
        //                bool val = (bool)value;
        //                stream.Write((byte)TypeStorage.Boolean);
        //                stream.Write(val);
        //            }
        //            break;
        //        case TypeCode.Byte:
        //            {
        //                byte val = (byte)value;
        //                stream.Write((byte)TypeStorage.Byte);
        //                stream.Write(val);
        //            }
        //            break;
        //        case TypeCode.Int16:
        //            {
        //                short val = (short)value;
        //                stream.Write((byte)TypeStorage.Int16);
        //                stream.Write(val);
        //            }
        //            break;
        //        case TypeCode.Int32:
        //            {
        //                int val = (int)value;
        //                stream.Write((byte)TypeStorage.Int32);
        //                stream.Write(val);
        //            }
        //            break;
        //        case TypeCode.Int64:
        //            {
        //                long val = (long)value;
        //                stream.Write((byte)TypeStorage.Int64);
        //                stream.Write(val);
        //            }
        //            break;
        //        case TypeCode.DateTime:
        //            {
        //                DateTime val = (DateTime)value;
        //                stream.Write((byte)TypeStorage.DateTime);
        //                stream.Write(val.ToBinary());
        //            }
        //            break;
        //        case TypeCode.Decimal:
        //            {
        //                decimal val = (decimal)value;
        //                stream.Write((byte)TypeStorage.Decimal);
        //                stream.Write(val);
        //            }
        //            break;
        //        case TypeCode.Single:
        //            {
        //                float val = (float)value;
        //                stream.Write((byte)TypeStorage.Float);
        //                stream.Write(val);
        //            }
        //            break;
        //        case TypeCode.Double:
        //            {
        //                double val = (double)value;
        //                stream.Write((byte)TypeStorage.Double);
        //                stream.Write(val);
        //            }
        //            break;
        //        case TypeCode.String:
        //            {
        //                string val = (string)value;
        //                stream.Write((byte)TypeStorage.String);
        //                stream.Write(val);
        //            }
        //            break;
        //        default:
        //            if (type == typeof(Guid))
        //            {
        //                Guid val = (Guid)value;
        //                stream.Write((byte)TypeStorage.Guid);
        //                stream.Write(val.ToByteArray());
        //            }
        //            else if (type == typeof(byte[]))
        //            {
        //                byte[] val = (byte[])value;
        //                stream.Write((byte)TypeStorage.ByteArray);
        //                stream.Write7BitEncodedInt(val.Length);
        //                stream.Write(val);
        //            }
        //            else
        //            {
        //                // serialize as string
        //                string val = value.ToString();
        //                stream.Write((byte)TypeStorage.String);
        //                stream.Write(val);
        //            }
        //            break;
        //    }
        //}

        public static void SaveRecord(int fldcount, IBedRecord record, BinaryWriter stream)
        {
            var fw = new StreamValueWriter(stream);

            if (fldcount != record.FieldCount)
            {
                throw new InternalError("DAE-00023 field count mitchmatch");
            }
            for (int i = 0; i < fldcount; i++)
            {
                record.ReadValue(i);
                fw.ReadFrom(record);
            }
        }
示例#21
0
        public void WriteRecord(StreamWriter fw, ITableStructure table, IBedRecord record, int index, object manager)
        {
            if (m_dda == null)
            {
                m_dda = (m_dialect ?? GenericDialect.Instance).CreateDataAdapter();
            }
            fw.Write("INSERT INTO ");
            fw.Write(m_tableName);
            fw.Write(" (");
            bool was = false;

            for (int i = 0; i < record.FieldCount; i++)
            {
                if (was)
                {
                    fw.Write(",");
                }
                fw.Write(record.GetName(i));
                was = true;
            }
            fw.Write(") VALUES (");
            was = false;
            for (int i = 0; i < record.FieldCount; i++)
            {
                if (was)
                {
                    fw.Write(",");
                }
                record.ReadValue(i);
                fw.Write(m_dda.GetSqlLiteral(record));
                //TypeStorage type = record.GetFieldType();

                //if (record.IsDBNull(i))
                //{
                //    fw.Write("NULL");
                //}
                //else
                //{
                //    fw.Write(m_quoteCharacter);
                //    string val = XmlTool.ObjectToString(record.GetValue(i));
                //    val = val.Replace("" + m_quoteCharacter, m_escapedQuote);
                //    fw.Write(val);
                //    fw.Write(m_quoteCharacter);
                //}
                was = true;
            }
            fw.Write(")");
            fw.Write(m_statementSeparator.ReplaceCEscapes());
        }
示例#22
0
        public void WriteRecord(System.IO.StreamWriter fw, ITableStructure table, IBedRecord record, int index, object manager)
        {
            var mgr = (Manager)manager;

            m_fmt.Writer = fw;
            m_fmt.BeginRow(false);
            for (int i = 0; i < record.FieldCount; i++)
            {
                record.ReadValue(i);
                mgr.formatter.ReadFrom(record);
                m_fmt.Cell(mgr.formatter.GetText());
            }
            m_fmt.EndRow(false);
            m_fmt.Writer = null;
        }
示例#23
0
        public override void GenerateSqlRow(IBedRecord row, ISqlDumper dmp, string[] selcolumns)
        {
            string[] colnames = GetColumns(ValueColumns, row.Structure, selcolumns);
            var      vals     = new ValueTypeHolder[colnames.Length];

            for (int i = 0; i < colnames.Length; i++)
            {
                vals[i] = new ValueTypeHolder(row.GetValue(colnames[i]), row.Structure.Columns[colnames[i]].DataType);
            }
            dmp.PutCmd("^insert ^into %f (%,i) ^values (%,v)",
                       FullTableName,
                       colnames,
                       vals
                       );
        }
示例#24
0
        protected void GenerateWhere(IBedRecord row, ISqlDumper dmp, string[] selcolumns)
        {
            dmp.Put(" ^where ");
            bool was = false;

            foreach (string col in GetColumns(WhereColumns, row.Structure, selcolumns))
            {
                if (was)
                {
                    dmp.Put(" ^and ");
                }
                dmp.Put("%i = %v", col, row.GetValue(col));
                was = true;
            }
        }
示例#25
0
        public static SynFootprint FromReader(IBedRecord record, int keylen, BedValueHolder holder, BedValueConvertor conv, IDataSynAdapter adapter)
        {
            var res = new SynFootprint();

            res.KeyData = new string[keylen];
            for (int i = 0; i < keylen; i++)
            {
                record.ReadValue(i);
                conv.ConvertValue(record, TypeStorage.String, holder);
                res.KeyData[i] = holder.GetString();
            }
            record.ReadValue(keylen);
            res.Hash = adapter.ReadHash(record, conv, holder);
            return(res);
        }
示例#26
0
 public ArrayDataRecord(IBedRecord record, int[] colindexes, ITableStructure changedStructure)
 {
     if (colindexes.Length != changedStructure.Columns.Count)
     {
         throw new InternalError("DAE-00052 ArrayDataRecord(): colnames.count != colindexes.count");
     }
     m_values = new object[colindexes.Length];
     for (int i = 0; i < colindexes.Length; i++)
     {
         if (colindexes[i] >= 0)
         {
             m_values[i] = record.GetValue(colindexes[i]);
         }
     }
     m_structure = changedStructure;
 }
示例#27
0
        public override void FillTable(ITableStructure table, IDataQueue queue, TableCopyOptions opts)
        {
            var colnames = from c in queue.GetRowFormat.Columns select c.ColumnName;

            try
            {
                if (Wcfg != null && Wcfg.ExtendedInserts)
                {
                    int rowsInBatch = 0;
                    while (!queue.IsEof)
                    {
                        if (Wcfg.BatchLimit > 0 && rowsInBatch >= Wcfg.BatchLimit)
                        {
                            m_dmp.EndCommand();
                            rowsInBatch = 0;
                        }
                        if (rowsInBatch == 0)
                        {
                            m_dmp.Put("^insert ^into %f (%,i) ^values\n", table, colnames);
                        }
                        else
                        {
                            m_dmp.Put(",\n");
                        }
                        IBedRecord row = queue.GetRecord();
                        m_dmp.Put("(%,v)", row);
                        rowsInBatch++;
                    }
                    if (rowsInBatch > 0)
                    {
                        m_dmp.EndCommand();
                    }
                }
                else
                {
                    while (!queue.IsEof)
                    {
                        IBedRecord row = queue.GetRecord();
                        m_dmp.PutCmd("^insert ^into %f (%,i) ^values (%,v)", table, colnames, row);
                    }
                }
            }
            finally
            {
                queue.CloseReading();
            }
        }
示例#28
0
        public override void GenerateSqlRow(IBedRecord row, ISqlDumper dmp, string[] selcolumns)
        {
            dmp.Put("^update %f ^set ", FullTableName);
            bool was = false;

            foreach (string col in GetColumns(ValueColumns, row.Structure, selcolumns))
            {
                if (was)
                {
                    dmp.Put(", ");
                }
                dmp.Put("%i = %v", col, new ValueTypeHolder(row.GetValue(col), row.Structure.Columns[col].DataType));
                was = true;
            }
            GenerateWhere(row, dmp, selcolumns);
            dmp.EndCommand();
        }
示例#29
0
        public void WriteRecord(StreamWriter fw, ITableStructure table, IBedRecord record, int index, object manager)
        {
            var mgr = (Manager)manager;

            string[] data = mgr.data;

            CsvWriter cw = CreateWriter(fw);

            // write data
            for (int i = 0; i < data.Length; i++)
            {
                record.ReadValue(i);
                mgr.formatter.ReadFrom(record);
                data[i] = mgr.formatter.GetText();
            }
            cw.WriteRow(data);
        }
示例#30
0
        private List <string> DoCreateInsertQuery(string askquery)
        {
            var  dh         = CreateHolderDumper();
            var  dmp        = dh.Dumper;
            var  autoinccol = m_dstInfo.Model.FindAutoIncrementColumn();
            bool idins      = autoinccol != null &&
                              (m_dstInfo.KeyCols.Contains(autoinccol.ColumnName) || m_dstInfo.DataCols.Contains(autoinccol.ColumnName));

            if (idins)
            {
                dmp.AllowIdentityInsert(m_item.Target.Table, true);
            }

            using (var cmd = m_syn.m_source.Connection.SystemConnection.CreateCommand())
            {
                cmd.CommandText = askquery;

                using (IBedReader reader = m_syn.m_source.GetAnyDDA().AdaptReader(cmd.ExecuteReader()))
                {
                    while (reader.Read())
                    {
                        IBedRecord rec = reader;
                        foreach (var recada in m_outputAdapters)
                        {
                            rec = recada.AdaptRecord(rec, m_syn.Progress);
                        }
                        dmp.Put("insert into %f (%,i %s %,i) values (%,v)",
                                m_item.Target.Table,
                                m_dstInfo.KeyCols,
                                m_dstInfo.DataCols.Length > 0 ? "," : "",
                                m_dstInfo.DataCols,
                                rec
                                );
                        dmp.EndCommand();
                    }
                }
            }

            if (idins)
            {
                dmp.AllowIdentityInsert(m_item.Target.Table, false);
            }
            return(dh.Scripts);
        }