public static string ReplaceLinkedServer(string sql, LinkedDatabaseInfo linkedInfo) { if (sql == null) return null; string linkedServerSpec = ""; if (linkedInfo != null && linkedInfo.LinkedServerName != null) { linkedServerSpec = String.Format("[{0}].[{1}].", linkedInfo.LinkedServerName, linkedInfo.LinkedDatabaseName); } return sql.Replace("[SERVER].", linkedServerSpec); }
public TableSizes GetTableSizes(DbConnection conn, LinkedDatabaseInfo linkedInfo) { var res = new TableSizes(); using (var cmd = conn.CreateCommand()) { cmd.CommandText = SqlServerLinkedServer.ReplaceLinkedServer(SqlServerDatabaseFactory.LoadEmbeddedResource("rowcounts.sql"), linkedInfo); using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { string table = reader.SafeString("Table"); string schema = reader.SafeString("Schema"); int rowcount = Int32.Parse(reader.SafeString("RowCount") ?? "0"); res.RowCount[new NameWithSchema(schema, table)] = rowcount; } } } return res; }
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.Log += _inserter_Log; _thread = new Thread(Run); _thread.Start(); }
public void UpdateData(MultiTableUpdateScript script, LinkedDatabaseInfo linkedInfo) { }
public void UpdateData(TableInfo table, SingleTableDataScript script, LinkedDatabaseInfo linkedInfo) { }
public void DropTable(TableInfo obj, bool testIfExists, LinkedDatabaseInfo linkedInfo) { DropTable(obj, testIfExists); }
public void CreateTable(TableInfo obj, LinkedDatabaseInfo linkedInfo) { CreateTable(obj); }
public TargetEntitySqlModel(DataSyncSqlModel dataSyncSqlModel, Target dbsh, IShellContext context) { this._dataSyncSqlModel = dataSyncSqlModel; this._dbsh = dbsh; TargetTable = new NameWithSchema(context.Replace(dbsh.TableSchema), context.Replace(dbsh.TableName)); string findSchema = dbsh.TableSchema; if (findSchema != null && findSchema.StartsWith(NameWithSchema.NoQuotePrefix)) findSchema = null; Structure = dataSyncSqlModel.TargetStructure.FindTableLike(findSchema, TargetTable.Name); SqlAlias = _dbsh.Alias ?? "dst_" + _dataSyncSqlModel.Entities.Count; foreach (var col in dbsh.Columns) { var targetCol = new TargetNoRefColumnSqlModel(col, FindColumnInfo(col.Name)); TargetColumns.Add(targetCol); foreach (string alias in ExtractColumnSources(col)) { SourceColumnSqlModel source = null; if (dataSyncSqlModel.SourceGraphModel == null) { // flat sync if (!String.IsNullOrEmpty(dbsh.PrimarySource)) { var tableSource = DataSync.FlatSources.FirstOrDefault(x => x.Match(Dbsh.PrimarySource)); if (tableSource != null) { source = tableSource.Columns.FirstOrDefault(x => x.Alias == alias); } } } else { source = dataSyncSqlModel.SourceGraphModel[alias]; //targetCol.Sources.Add(source); } RequiredSourceColumns.Add(source); if (col.IsKey) KeySourceColumns.Add(source); } } if (!String.IsNullOrEmpty(_dbsh.Connection)) { var ctxConn = new NormalizedDatabaseConnectionInfo(new DatabaseConnectionInfoHolder { ProviderString = context.GetDefaultConnection() }); var tableConn = new NormalizedDatabaseConnectionInfo(new DatabaseConnectionInfoHolder { ProviderString = context.Replace(_dbsh.Connection), LinkedInfo = _dbsh.LinkedInfo }); if (ctxConn != tableConn) { if (ctxConn.ServerConnectionString == tableConn.ServerConnectionString) { TargetLinkedInfo = tableConn.GetLinkedInfo(); } else { throw new IncorrectRdsDefinitionException($"DBSH-00000 RDS target must be reachable by database or linked server: ({TargetTable})"); } } } }
public void ReplaceTargetSchemaByTemplate(string template) { TableSchema = template; Connection = null; LinkedInfo = null; }
public void UpdateData(MultiTableUpdateScript script, LinkedDatabaseInfo linkedInfo) { if (script == null) return; string linkedInfoStr = linkedInfo != null ? linkedInfo.ToString() : ""; int updrows = 0, updflds = 0; foreach (var upd in script.Updates) { Put("^update %s%f ^set ", linkedInfoStr, upd.Table); for (int i = 0; i < upd.Columns.Length; i++) { if (i > 0) Put(", "); Put("%i=%v", upd.Columns[i], upd.Values[i]); } Where(upd.Table, upd.CondCols, upd.CondValues); Put(";&n"); updrows++; updflds += upd.Values.Length; } }
public void UpdateData(TableInfo table, SingleTableDataScript script, LinkedDatabaseInfo linkedInfo) { if (script == null) return; int delcnt = 0, inscnt = 0, updrows = 0, updflds = 0; string linkedInfoStr = linkedInfo != null ? linkedInfo.ToString() : ""; foreach (var del in script.Deletes) { Put("^delete ^from %s%f", linkedInfoStr, table.FullName); Where(table.FullName, del.CondCols, del.CondValues); Put(";&n"); delcnt++; } foreach (var upd in script.Updates) { Put("^update %s%f ^set ", linkedInfoStr, table.FullName); for (int i = 0; i < upd.Columns.Length; i++) { if (i > 0) Put(", "); Put("%i=%v", upd.Columns[i], new ValueTypeHolder(upd.Values[i], table.Columns[upd.Columns[i]].CommonType)); } Where(table.FullName, upd.CondCols, upd.CondValues); Put(";&n"); updrows++; updflds += upd.Values.Length; } ColumnInfo autoinc = null; if (table != null) autoinc = table.FindAutoIncrementColumn(); bool isIdentityInsert = false; foreach (var ins in script.Inserts) { if (autoinc != null) { if (Array.IndexOf(ins.Columns, autoinc.Name) >= 0) { if (!isIdentityInsert) AllowIdentityInsert(table.FullName, true); isIdentityInsert = true; } else { if (isIdentityInsert) AllowIdentityInsert(table.FullName, false); isIdentityInsert = false; } } var vals = new List<ValueTypeHolder>(); var insColumns = new List<string>(); for (int i = 0; i < ins.Columns.Length; i++) { var col = table.Columns[ins.Columns[i]]; if (col != null) { insColumns.Add(ins.Columns[i]); vals.Add(new ValueTypeHolder(ins.Values[i], col.CommonType)); } } if (insColumns.Count > 0) { Put("^insert ^into %s%f (%,i) ^values (%,v);&n", linkedInfoStr, table.FullName, insColumns, vals); } inscnt++; } if (isIdentityInsert) AllowIdentityInsert(table.FullName, false); }