Beispiel #1
0
        ICdlWriter ITabularDataTarget.CreateWriter(TableInfo rowFormat, CopyTableTargetOptions options, IShellContext context, DataFormatSettings sourceDataFormat)
        {
            string file = GetName(context);

            file = context.ResolveFile(file, ResolveFileMode.Output);
            context.Info("Writing file " + Path.GetFullPath(file));
            return(new CdlFileWriter(file, rowFormat));
        }
Beispiel #2
0
        public ICdlWriter CreateWriter(TableInfo rowFormat, CopyTableTargetOptions options, IShellContext context, DataFormatSettings sourceDataFormat)
        {
            string file     = context.ResolveFile(context.Replace(File), ResolveFileMode.Output);
            var    fw       = new StreamWriter(System.IO.File.OpenWrite(file));
            var    provider = GetConnectionProvider(context);

            return(new SqlFileWriter(fw, provider.Factory, InsertSeparatorAfterRows));
        }
Beispiel #3
0
        ICdlWriter ITabularDataTarget.CreateWriter(TableInfo inputRowFormat, CopyTableTargetOptions options, IShellContext context, DataFormatSettings sourceDataFormat)
        {
            var  writer      = GetModel(context);
            bool closeWriter = false;

            if (writer == null)
            {
                closeWriter = true;
                writer      = CreateWriter(context.ResolveFile(context.Replace(File), ResolveFileMode.Output));
            }
            var impl = new XmlWriterImpl(writer, closeWriter, sourceDataFormat, UseAttributes, RowElementName);

            return(impl);
        }
Beispiel #4
0
        ICdlWriter ITabularDataTarget.CreateWriter(TableInfo rowFormat, CopyTableTargetOptions options, IShellContext context, DataFormatSettings sourceDataFormat)
        {
            string file = context.ResolveFile(GetName(context), ResolveFileMode.Output);

            context.GetLogger <CsvFile>().LogInformation("Writing file {file}", Path.GetFullPath(file));
            context.Info("Writing file " + Path.GetFullPath(file));
            var fs     = System.IO.File.OpenWrite(file);
            var fw     = new StreamWriter(fs, Encoding);
            var writer = new CsvWriter(fw, Delimiter, Quote, Escape, Comment, QuotingMode, EndOfLine, DataFormat);

            if (HasHeaders)
            {
                writer.WriteRow(rowFormat.Columns.Select(c => c.Name));
            }
            return(writer);
        }
Beispiel #5
0
 ICdlWriter ITabularDataTarget.CreateWriter(TableInfo inputRowFormat, CopyTableTargetOptions options, IShellContext context, DataFormatSettings sourceDataFormat)
 {
     return(new TableWriter(context, GetConnectionProvider(context), GetFullName(context), inputRowFormat, options, StructureOverride, LinkedInfo, sourceDataFormat));
 }
Beispiel #6
0
        public ICdlWriter CreateWriter(TableInfo inputRowFormat, CopyTableTargetOptions options, IShellContext context, DataFormatSettings sourceDataFormat)
        {
            var connection = GetConnectionProvider(context);

            using (var conn = connection.Connect())
            {
                var db = new DatabaseInfo();
                db.LinkedInfo = LinkedInfo;
                var tbl = inputRowFormat.CloneTable(db);
                tbl.FullName = GetFullName(context);
                foreach (var col in tbl.Columns)
                {
                    col.AutoIncrement = false;
                }
                tbl.ForeignKeys.Clear();
                if (tbl.PrimaryKey != null)
                {
                    tbl.PrimaryKey.ConstraintName = null;
                }
                tbl.AfterLoadLink();

                if (IdentityColumn != null)
                {
                    var col = new ColumnInfo(tbl);
                    col.Name          = IdentityColumn;
                    col.DataType      = "int";
                    col.AutoIncrement = true;
                    col.NotNull       = true;
                    var pk = new PrimaryKeyInfo(tbl);
                    pk.Columns.Add(new ColumnReference {
                        RefColumn = col
                    });
                    pk.ConstraintName = "PK_" + tbl.Name;
                    tbl.PrimaryKey    = pk;
                    tbl.Columns.Insert(0, col);
                }

                //var sw = new StringWriter();
                var so  = new ConnectionSqlOutputStream(conn, null, connection.Factory.CreateDialect());
                var dmp = connection.Factory.CreateDumper(so, new SqlFormatProperties());
                if (DropIfExists)
                {
                    dmp.DropTable(tbl, true);
                }

                bool useExistingTable = false;
                if (UseIfExists)
                {
                    var ts = context.GetDatabaseStructure(connection.ProviderString);
                    useExistingTable = ts.FindTableLike(tbl.FullName.Schema, tbl.FullName.Name) != null;
                }

                if (!useExistingTable)
                {
                    tbl.Columns.ForEach(x => x.EnsureDataType(connection.Factory.CreateSqlTypeProvider()));
                    dmp.CreateTable(tbl);
                }
                //using (var cmd = conn.CreateCommand())
                //{
                //    cmd.CommandText = sw.ToString();
                //    cmd.ExecuteNonQuery();
                //}

                return(new TableWriter(context, connection, GetFullName(context), inputRowFormat, options, useExistingTable ? null : tbl, LinkedInfo, sourceDataFormat));
            }
        }
Beispiel #7
0
        protected override void DoRun(IShellContext context)
        {
            ITabularDataSource source;
            ITabularDataTarget target;

            if (Source != null && SourceExpression != null)
            {
                throw new Exception("DBSH-00087 CopyTable: Both Source and SourceExpression are set");
            }
            if (Source == null && SourceExpression == null)
            {
                throw new Exception("DBSH-00088 CopyTable: None Source and SourceExpression are set");
            }
            if (Target != null && TargetExpression != null)
            {
                throw new Exception("DBSH-00089 CopyTable: Both Target and TargetExpression are set");
            }
            if (Target == null && TargetExpression == null)
            {
                throw new Exception("DBSH-00090 CopyTable: None Target and TargetExpression are set");
            }

            if (SourceExpression != null)
            {
                source = (ITabularDataSource)context.Evaluate(SourceExpression);
            }
            else
            {
                source = Source;
            }

            if (TargetExpression != null)
            {
                target = (ITabularDataTarget)context.Evaluate(TargetExpression);
            }
            else
            {
                target = Target;
            }

            var options = new CopyTableTargetOptions
            {
                TruncateBeforeCopy = CleanTarget,
                TargetMapMode      = TargetMapMode,
                AllowBulkCopy      = AllowBulkCopy,
                DisableConstraints = DisableConstraints,
            };

            var table = source.GetRowFormat(context);

            context.Info(String.Format("Copy table data {0}=>{1}", Source.ToStringCtx(context), Target.ToStringCtx(context)));

            var transformedInputTable = table;
            var counts = new List <int>();

            if (ColumnMap.Count > 0)
            {
                transformedInputTable = new TableInfo(null);
                foreach (var mapItem in ColumnMap)
                {
                    var newCols = mapItem.GetOutputColumns(table, context);
                    counts.Add(newCols.Length);
                    transformedInputTable.Columns.AddRange(newCols);
                }
            }

            using (var reader = source.CreateReader(context))
            {
                using (var writer = target.CreateWriter(transformedInputTable, options, context, source.GetSourceFormat(context)))
                {
                    int rowNumber = 0;
                    while (reader.Read())
                    {
                        if (ColumnMap.Count > 0)
                        {
                            var outputRecord = new ArrayDataRecord(transformedInputTable);
                            int columnIndex  = 0;
                            for (int i = 0; i < ColumnMap.Count; i++)
                            {
                                var map   = ColumnMap[i];
                                int count = counts[i];
                                for (int j = 0; j < count; j++, columnIndex++)
                                {
                                    outputRecord.SeekValue(columnIndex);
                                    map.ProcessMapping(j, rowNumber, reader, outputRecord, context);
                                }
                            }
                            writer.Write(outputRecord);
                        }
                        else
                        {
                            writer.Write(reader);
                        }
                        rowNumber++;
                    }
                }
            }
        }
Beispiel #8
0
        public TableWriter(IShellContext context, IConnectionProvider connection, NameWithSchema name, TableInfo inputRowFormat, CopyTableTargetOptions options, TableInfo destinationTableOverride = null, LinkedDatabaseInfo linkedInfo = null, DataFormatSettings sourceDataFormat = null)
        {
            _connectionProvider = connection;
            _linkedInfo         = linkedInfo;
            _name           = name;
            _inputRowFormat = inputRowFormat;
            _queue          = new CdlDataQueue(inputRowFormat);
            _context        = context;

            _inserter = connection.Factory.CreateBulkInserter();
            _inserter.SourceDataFormat = sourceDataFormat;
            _connection          = _connectionProvider.Connect();
            _inserter.Connection = _connection;
            _inserter.Factory    = connection.Factory;
            _inserter.LinkedInfo = _linkedInfo;
            var db = context.GetDatabaseStructure(connection.ProviderString);

            _inserter.DestinationTable = destinationTableOverride ?? db.FindTableLike(_name.Schema, _name.Name);
            _inserter.CopyOptions      = options;
            _inserter.MessageLogger    = _context;
            _inserter.ServiceProvider  = context.ServiceProvider;

            _thread = new Thread(Run);
            _thread.Start();
        }
Beispiel #9
0
 public ICdlWriter CreateWriter(TableInfo rowFormat, CopyTableTargetOptions options, IShellContext context, DataFormatSettings sourceDataFormat)
 {
     return(GetModel(context).CreateWriter(rowFormat, context.Replace(SheetName)));
 }
Beispiel #10
0
 ICdlWriter ITabularDataTarget.CreateWriter(TableInfo rowFormat, CopyTableTargetOptions options, IShellContext context, DataFormatSettings sourceDataFormat)
 {
     return(CreateTarget(context).CreateWriter(rowFormat, options, context, sourceDataFormat));
 }