diff --git a/.gitignore b/.gitignore
index ae01dcd..5c38ccb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,4 @@
-/bin
-/obj
-launch.json
+/bin
+/obj
+launch.json
.gitignore
\ No newline at end of file
diff --git a/runner.cs b/runner.cs
index 9eaad51..3f87472 100644
--- a/runner.cs
+++ b/runner.cs
@@ -1,346 +1,346 @@
-using System;
-using Npgsql;
-
-namespace test
-{
- class Program
- {
- private
-
- static void Main(string[] args)
- {
-
- string scs = "";
- string dcs = "";
- string sdt = "";
- string ddt = "";
- string sq = "";
- string dt = "";
- Boolean trim = false;
- int r = 0;
- int t = 0;
- string sql = "";
- string nr = "";
- string nc = "";
- string nl = Environment.NewLine;
- //declaring these objects globally will asume these libraries exist, they may not
- System.Data.Odbc.OdbcConnection s_odbc = new System.Data.Odbc.OdbcConnection();
- System.Data.Odbc.OdbcConnection d_odbc = new System.Data.Odbc.OdbcConnection();
- NpgsqlConnection s_npgsql = new NpgsqlConnection();
- NpgsqlConnection d_npgsql = new NpgsqlConnection();
- System.Data.Common.DbConnection sc; //source connection
- System.Data.Common.DbConnection dc; //destination connection
-
- string msg = "Help:";
- msg = msg + nl + "version 0.25";
- msg = msg + nl;
- msg = msg + nl + "options:";
- msg = msg + nl + "-sdt sourc driver type";
- msg = msg + nl + "-scs source connection string";
- msg = msg + nl + "-ddt destination driver type";
- msg = msg + nl + "-dcs destination connection string";
- msg = msg + nl + "-sq path to source query";
- msg = msg + nl + "-dt fully qualified name of destination table";
- msg = msg + nl + "-t trim text";
- msg = msg + nl + "--help info";
- msg = msg + nl;
- msg = msg + nl + "available driver types:";
- msg = msg + nl + "-------------------------";
- msg = msg + nl + "* odbc";
- msg = msg + nl + "* npgsql";
-
-
- //---------------------------------------parse args into variables-------------------------------------------------
-
- for (int i = 0; i < args.Length; i = i +1 ){
- switch (args[i]) {
- //sourc driver type
- case "-sdt":
- sdt = args[i+1];
- break;
- //source connection string
- case "-scs":
- scs = args[i+1];
- break;
- //destination driver type
- case "-ddt":
- ddt = args[i+1];
- break;
- //destination connection string
- case "-dcs":
- dcs = args[i+1];
- break;
- //source query path
- case "-sq":
- try {
- sq = System.IO.File.ReadAllText(args[i+1]);
- }
- catch (Exception e) {
- Console.Write(nl + "error reasing source sql file: " + e.Message);
- return;
- }
- break;
- //destination table name
- case "-dt":
- dt = "INSERT INTO " + args[i+1] + " VALUES ";
- break;
- case "-t":
- trim = true;
- break;
- case "--help":
- Console.Write(nl);
- Console.Write(msg);
- return;
- case "-help":
- Console.Write(nl);
- Console.Write(msg);
- return;
- case "-h":
- Console.Write(nl);
- Console.Write(msg);
- return;
- case @"\?":
- Console.Write(nl);
- Console.Write(msg);
- return;
- default:
- break;
- }
- }
-
- Console.Write(nl);
- Console.Write(sdt);
- Console.Write(scs);
- Console.Write(nl);
- Console.Write(ddt);
- Console.Write(dcs);
- Console.Write(nl);
- Console.Write(sq);
- Console.Write(nl);
- Console.Write(dt);
-
- //return;
-
- //-------------------------------------------establish connections-------------------------------------------------
-
- //setup source
- switch (sdt){
- case "odbc":
- try {
- s_odbc.ConnectionString = scs;
- }
- catch (Exception e) {
- Console.Write(nl + "bad source connection string: " + e.Message);
- return;
- }
- sc = s_odbc;
- return;
- default:
- break;
- }
- s_odbc.ConnectionString = scs;
- sc = s_odbc;
-
- //setup destination
- switch (ddt) {
- case "npgsql":
- try {
- d_npgsql.ConnectionString = dcs;
- }
- catch (Exception e) {
- Console.Write(nl + "bad source connection string: " + e.Message);
- return;
- }
- dc = d_npgsql;
- return;
- default:
- break;
- }
- d_npgsql.ConnectionString = dcs;
- dc = d_npgsql;
-
- /*
- //polymorph open
- try {
- sc.Open();
- }
- catch (Exception e) {
- Console.Write(nl + "issue connection to source: " + e.Message);
- return;
- }
-
- try {
- dc.Open();
- }
- catch (Exception e) {
- sc.Close();
- Console.Write(nl + "issue connecting to destination: "+ e.Message);
- }
-
-
-
- //----------------------------------------------setup commands---------------------------------------------------
-
- var s_cmd = new System.Data.Odbc.OdbcCommand();
- var pgcom = d_npgsql.CreateCommand();
-
- //---------------------------------------------begin transaction---------------------------------------------------------
-
- Console.Write(nl);
- Console.Write("etl start:" + DateTime.Now.ToString());
-
- /*
- NpgsqlTransaction pgt = pgc.BeginTransaction();
- s_odbcommandTimeout = 6000;
- s_odbcommandTimeout = 6000;
- system.Data.Odbc.OdbcDataReader ibmdr;
- try {
- ibmdr = s_odbcxecuteReader();
- ibmdr = s_odbcxecuteReader();
- }
- catch (Exception e) {
- Console.Write(nl);
- Console.Write("error on source sql:");
- Console.Write(nl);
- Console.Write(e.Message);
- s_odbcse();
- s_odbcse();
- pgc.Cldse();
- return;
- }
- //setup getv object array dimensioned to number of columns for scenario
- //getv hold an array of datareader row
- var getv = new object[ibmdr.FieldCount];
- int cols = ibmdr.FieldCount;
- //dtn holds list of data types per column
- var dtn = new string[ibmdr.FieldCount];
- while (ibmdr.Read()) {
- r = r + 1;
- t = t +1 ;
- nr = "";
- //populate all the data type names into a string array instead of calling against ibmdr in every iteration
- if (t == 1 ) {
- for (int i = 0; i < cols; i++){
- dtn[i] = ibmdr.GetDataTypeName(i);
- }
- }
- for (int i = 0 ; i < cols;i++) {
- //Console.Write(nl);
- //Console.Write(DBNull.Value.Equals(ibmdr.GetValue(i)).ToString());
- //Console.Write(ibmdr.GetValue(i).ToString());
- Boolean dnull = false;
- if (dtn[i] == "BIGINT") {
- dnull = DBNull.Value.Equals(ibmdr.GetInt64(i));
- }
- else {
- dnull = DBNull.Value.Equals(ibmdr.GetValue(i));
- }
- if (! dnull) {
- switch (dtn[i]){
- case "VARCHAR":
- if (trim) {
- nc = "'" + ibmdr.GetValue(i).ToString().Replace("'","''").TrimEnd() + "'";
- }
- else {
- nc = "'" + ibmdr.GetValue(i).ToString().Replace("'","''") + "'";
- }
- break;
- case "CHAR":
- if (trim) {
- nc = "'" + ibmdr.GetValue(i).ToString().Replace("'","''").TrimEnd() + "'";
- }
- else {
- nc = "'" + ibmdr.GetValue(i).ToString().Replace("'","''") + "'";
- }
- break;
- case "DATE":
- if (ibmdr.GetValue(i).ToString() == "1/1/0001 12:00:00 AM" || ibmdr.GetValue(i).ToString() == "") {
- nc = "NULL";
- }
- else {
- nc = "'" + ibmdr.GetValue(i).ToString() + "'";
- }
- break;
- case "TIME":
- nc = "'" + ibmdr.GetValue(i).ToString() + "'";
- break;
- case "TIMESTAMP":
- nc = "'" + ibmdr.GetDateTime(i).ToString() + "'";
- break;
- case "BIGINT":
- nc = ibmdr.GetInt64(i).ToString();
- break;
- default:
- if (ibmdr.GetValue(i).ToString() != "") {
- nc = ibmdr.GetValue(i).ToString();
- }
- else {
- nc = "NULL";
- }
- break;
- }
- }
- else {
- nc = "NULL";
- }
- if (i!=0) {
- nr = nr + ",";
- }
- nr = nr + nc;
- }
- if (sql!="") {
- sql = sql + ",";
- }
- sql = sql + "(" + nr + ")";
- if (r == 250) {
- r = 0;
- sql = dt + sql;
- pgcom.CommandText = sql;
- try {
- pgcom.ExecuteNonQuery();
- }
- catch (Exception e) {
- Console.Write(nl);
- Console.Write(e.Message);
- System.IO.File.WriteAllText(@"C:\Users\ptrowbridge\Downloads\runner_error.sql",sql);
- s_odbcse();
- s_odbcse();
- pgt.Rollbdck();
- pgc.Close();
- return;
- }
- sql = "";
- Console.Write(nl + t.ToString());
- }
- }
- if (r != 0) {
- sql = dt + sql;
- pgcom.CommandText = sql;
- try {
- pgcom.ExecuteNonQuery();
- }
- catch (Exception e) {
- Console.Write(nl);
- Console.Write(e.Message);
- System.IO.File.WriteAllText(@"C:\Users\ptrowbridge\Downloads\runner_error.sql",sql);
- //s_odbcse();
- //s_odbcse();
- pgt.Rodlback();
- pgc.Close();
- return;
- }
- sql = "";
- Console.Write(nl + t.ToString());
- }
-
- pgt.Commit();
- s_odbcse();
- s_odbcse();
- pgc.Cldse();
-
- Console.Write(nl);
- Console.Write("etl end:" + DateTime.Now.ToString());
- */
- }
- }
-}
+using System;
+using Npgsql;
+
+namespace test
+{
+ class Program
+ {
+ private
+
+ static void Main(string[] args)
+ {
+
+ string scs = "";
+ string dcs = "";
+ string sdt = "";
+ string ddt = "";
+ string sq = "";
+ string dt = "";
+ Boolean trim = false;
+ int r = 0;
+ int t = 0;
+ string sql = "";
+ string nr = "";
+ string nc = "";
+ string nl = Environment.NewLine;
+ //declaring these objects globally will asume these libraries exist, they may not
+ System.Data.Odbc.OdbcConnection s_odbc = new System.Data.Odbc.OdbcConnection();
+ System.Data.Odbc.OdbcConnection d_odbc = new System.Data.Odbc.OdbcConnection();
+ NpgsqlConnection s_npgsql = new NpgsqlConnection();
+ NpgsqlConnection d_npgsql = new NpgsqlConnection();
+ System.Data.Common.DbConnection sc; //source connection
+ System.Data.Common.DbConnection dc; //destination connection
+
+ string msg = "Help:";
+ msg = msg + nl + "version 0.25";
+ msg = msg + nl;
+ msg = msg + nl + "options:";
+ msg = msg + nl + "-sdt sourc driver type";
+ msg = msg + nl + "-scs source connection string";
+ msg = msg + nl + "-ddt destination driver type";
+ msg = msg + nl + "-dcs destination connection string";
+ msg = msg + nl + "-sq path to source query";
+ msg = msg + nl + "-dt fully qualified name of destination table";
+ msg = msg + nl + "-t trim text";
+ msg = msg + nl + "--help info";
+ msg = msg + nl;
+ msg = msg + nl + "available driver types:";
+ msg = msg + nl + "-------------------------";
+ msg = msg + nl + "* odbc";
+ msg = msg + nl + "* npgsql";
+
+
+ //---------------------------------------parse args into variables-------------------------------------------------
+
+ for (int i = 0; i < args.Length; i = i +1 ){
+ switch (args[i]) {
+ //sourc driver type
+ case "-sdt":
+ sdt = args[i+1];
+ break;
+ //source connection string
+ case "-scs":
+ scs = args[i+1];
+ break;
+ //destination driver type
+ case "-ddt":
+ ddt = args[i+1];
+ break;
+ //destination connection string
+ case "-dcs":
+ dcs = args[i+1];
+ break;
+ //source query path
+ case "-sq":
+ try {
+ sq = System.IO.File.ReadAllText(args[i+1]);
+ }
+ catch (Exception e) {
+ Console.Write(nl + "error reasing source sql file: " + e.Message);
+ return;
+ }
+ break;
+ //destination table name
+ case "-dt":
+ dt = "INSERT INTO " + args[i+1] + " VALUES ";
+ break;
+ case "-t":
+ trim = true;
+ break;
+ case "--help":
+ Console.Write(nl);
+ Console.Write(msg);
+ return;
+ case "-help":
+ Console.Write(nl);
+ Console.Write(msg);
+ return;
+ case "-h":
+ Console.Write(nl);
+ Console.Write(msg);
+ return;
+ case @"\?":
+ Console.Write(nl);
+ Console.Write(msg);
+ return;
+ default:
+ break;
+ }
+ }
+
+ Console.Write(nl);
+ Console.Write(sdt);
+ Console.Write(scs);
+ Console.Write(nl);
+ Console.Write(ddt);
+ Console.Write(dcs);
+ Console.Write(nl);
+ Console.Write(sq);
+ Console.Write(nl);
+ Console.Write(dt);
+
+ //return;
+
+ //-------------------------------------------establish connections-------------------------------------------------
+
+ //setup source
+ switch (sdt){
+ case "odbc":
+ try {
+ s_odbc.ConnectionString = scs;
+ }
+ catch (Exception e) {
+ Console.Write(nl + "bad source connection string: " + e.Message);
+ return;
+ }
+ sc = s_odbc;
+ return;
+ default:
+ break;
+ }
+ s_odbc.ConnectionString = scs;
+ sc = s_odbc;
+
+ //setup destination
+ switch (ddt) {
+ case "npgsql":
+ try {
+ d_npgsql.ConnectionString = dcs;
+ }
+ catch (Exception e) {
+ Console.Write(nl + "bad source connection string: " + e.Message);
+ return;
+ }
+ dc = d_npgsql;
+ return;
+ default:
+ break;
+ }
+ d_npgsql.ConnectionString = dcs;
+ dc = d_npgsql;
+
+ /*
+ //polymorph open
+ try {
+ sc.Open();
+ }
+ catch (Exception e) {
+ Console.Write(nl + "issue connection to source: " + e.Message);
+ return;
+ }
+
+ try {
+ dc.Open();
+ }
+ catch (Exception e) {
+ sc.Close();
+ Console.Write(nl + "issue connecting to destination: "+ e.Message);
+ }
+
+
+
+ //----------------------------------------------setup commands---------------------------------------------------
+
+ var s_cmd = new System.Data.Odbc.OdbcCommand();
+ var pgcom = d_npgsql.CreateCommand();
+
+ //---------------------------------------------begin transaction---------------------------------------------------------
+
+ Console.Write(nl);
+ Console.Write("etl start:" + DateTime.Now.ToString());
+
+ /*
+ NpgsqlTransaction pgt = pgc.BeginTransaction();
+ s_odbcommandTimeout = 6000;
+ s_odbcommandTimeout = 6000;
+ system.Data.Odbc.OdbcDataReader ibmdr;
+ try {
+ ibmdr = s_odbcxecuteReader();
+ ibmdr = s_odbcxecuteReader();
+ }
+ catch (Exception e) {
+ Console.Write(nl);
+ Console.Write("error on source sql:");
+ Console.Write(nl);
+ Console.Write(e.Message);
+ s_odbcse();
+ s_odbcse();
+ pgc.Cldse();
+ return;
+ }
+ //setup getv object array dimensioned to number of columns for scenario
+ //getv hold an array of datareader row
+ var getv = new object[ibmdr.FieldCount];
+ int cols = ibmdr.FieldCount;
+ //dtn holds list of data types per column
+ var dtn = new string[ibmdr.FieldCount];
+ while (ibmdr.Read()) {
+ r = r + 1;
+ t = t +1 ;
+ nr = "";
+ //populate all the data type names into a string array instead of calling against ibmdr in every iteration
+ if (t == 1 ) {
+ for (int i = 0; i < cols; i++){
+ dtn[i] = ibmdr.GetDataTypeName(i);
+ }
+ }
+ for (int i = 0 ; i < cols;i++) {
+ //Console.Write(nl);
+ //Console.Write(DBNull.Value.Equals(ibmdr.GetValue(i)).ToString());
+ //Console.Write(ibmdr.GetValue(i).ToString());
+ Boolean dnull = false;
+ if (dtn[i] == "BIGINT") {
+ dnull = DBNull.Value.Equals(ibmdr.GetInt64(i));
+ }
+ else {
+ dnull = DBNull.Value.Equals(ibmdr.GetValue(i));
+ }
+ if (! dnull) {
+ switch (dtn[i]){
+ case "VARCHAR":
+ if (trim) {
+ nc = "'" + ibmdr.GetValue(i).ToString().Replace("'","''").TrimEnd() + "'";
+ }
+ else {
+ nc = "'" + ibmdr.GetValue(i).ToString().Replace("'","''") + "'";
+ }
+ break;
+ case "CHAR":
+ if (trim) {
+ nc = "'" + ibmdr.GetValue(i).ToString().Replace("'","''").TrimEnd() + "'";
+ }
+ else {
+ nc = "'" + ibmdr.GetValue(i).ToString().Replace("'","''") + "'";
+ }
+ break;
+ case "DATE":
+ if (ibmdr.GetValue(i).ToString() == "1/1/0001 12:00:00 AM" || ibmdr.GetValue(i).ToString() == "") {
+ nc = "NULL";
+ }
+ else {
+ nc = "'" + ibmdr.GetValue(i).ToString() + "'";
+ }
+ break;
+ case "TIME":
+ nc = "'" + ibmdr.GetValue(i).ToString() + "'";
+ break;
+ case "TIMESTAMP":
+ nc = "'" + ibmdr.GetDateTime(i).ToString() + "'";
+ break;
+ case "BIGINT":
+ nc = ibmdr.GetInt64(i).ToString();
+ break;
+ default:
+ if (ibmdr.GetValue(i).ToString() != "") {
+ nc = ibmdr.GetValue(i).ToString();
+ }
+ else {
+ nc = "NULL";
+ }
+ break;
+ }
+ }
+ else {
+ nc = "NULL";
+ }
+ if (i!=0) {
+ nr = nr + ",";
+ }
+ nr = nr + nc;
+ }
+ if (sql!="") {
+ sql = sql + ",";
+ }
+ sql = sql + "(" + nr + ")";
+ if (r == 250) {
+ r = 0;
+ sql = dt + sql;
+ pgcom.CommandText = sql;
+ try {
+ pgcom.ExecuteNonQuery();
+ }
+ catch (Exception e) {
+ Console.Write(nl);
+ Console.Write(e.Message);
+ System.IO.File.WriteAllText(@"C:\Users\ptrowbridge\Downloads\runner_error.sql",sql);
+ s_odbcse();
+ s_odbcse();
+ pgt.Rollbdck();
+ pgc.Close();
+ return;
+ }
+ sql = "";
+ Console.Write(nl + t.ToString());
+ }
+ }
+ if (r != 0) {
+ sql = dt + sql;
+ pgcom.CommandText = sql;
+ try {
+ pgcom.ExecuteNonQuery();
+ }
+ catch (Exception e) {
+ Console.Write(nl);
+ Console.Write(e.Message);
+ System.IO.File.WriteAllText(@"C:\Users\ptrowbridge\Downloads\runner_error.sql",sql);
+ //s_odbcse();
+ //s_odbcse();
+ pgt.Rodlback();
+ pgc.Close();
+ return;
+ }
+ sql = "";
+ Console.Write(nl + t.ToString());
+ }
+
+ pgt.Commit();
+ s_odbcse();
+ s_odbcse();
+ pgc.Cldse();
+
+ Console.Write(nl);
+ Console.Write("etl end:" + DateTime.Now.ToString());
+ */
+ }
+ }
+}
diff --git a/runner.csproj b/runner.csproj
index 619e0b5..c3ecb3b 100644
--- a/runner.csproj
+++ b/runner.csproj
@@ -1,17 +1,17 @@
-
-
-
- Exe
- netcoreapp2.1
-
-
-
-
-
-
-
-
- win10-x64;ubuntu.16.04-x64
-
-
-
+
+
+
+ Exe
+ netcoreapp2.1
+
+
+
+
+
+
+
+
+ win10-x64;ubuntu.16.04-x64
+
+
+