Skip to content

Commit

Permalink
Merge pull request #25 from SQLPlayer/develop
Browse files Browse the repository at this point in the history
ver.2.4
  • Loading branch information
NowinskiK authored Sep 8, 2021
2 parents d6dbf17 + e506676 commit 92a8527
Show file tree
Hide file tree
Showing 7 changed files with 240 additions and 185 deletions.
3 changes: 3 additions & 0 deletions App.config
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="excludeDataTypes" value="timestamp;" />
</appSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/>
</startup>
Expand Down
7 changes: 7 additions & 0 deletions ChangesLog.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
SQLPlayer Data Script Writer - Changes Log
==========================================

ver.2.4 @ 08/09/2021
- Support for datetimeoffset type (#20)
- Config data types to not be scripted (#20)
- Fixed SQL reading structure of a table (#23)
- Do not script calculated columns (#18)
- Option to open target folder in Explorer

ver.2.3 @ 02/12/2020
- Support for Temporal tables (#10)
- Support for Time data type (#14)
Expand Down
343 changes: 172 additions & 171 deletions DataScriptWriter.csproj

Large diffs are not rendered by default.

9 changes: 5 additions & 4 deletions Properties/Resources.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 10 additions & 5 deletions Properties/Resources.resx
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,8 @@ INNER JOIN sys.schemas s on s.schema_id = o.schema_id
WHERE o.name = parsename(@TableName, 1) and s.name = parsename(@TableName, 2)
);
WITH cc as (
SELECT c.name as COLUMN_NAME, c.is_identity from sys.objects o
SELECT c.name as COLUMN_NAME, c.is_identity, c.is_computed
FROM sys.objects o
INNER JOIN sys.columns c ON c.object_id = o.object_id
WHERE o.object_id = @oid
)
Expand All @@ -163,6 +164,7 @@ LEFT JOIN (
select tc.TABLE_SCHEMA, tc.TABLE_NAME, kcu.COLUMN_NAME, tc.constraint_type
from information_schema.table_constraints tc
join information_schema.key_column_usage kcu on
tc.table_schema = kcu.table_schema and
tc.table_name = kcu.table_name and
tc.constraint_name = kcu.constraint_name
where tc.table_name = parsename(@TableName, 1) and
Expand All @@ -171,7 +173,8 @@ LEFT JOIN (
) as co on co.TABLE_SCHEMA = c.TABLE_SCHEMA and co.TABLE_NAME = c.TABLE_NAME and co.COLUMN_NAME = c.COLUMN_NAME
LEFT JOIN cc ON cc.COLUMN_NAME = c.COLUMN_NAME
where c.table_name = parsename(@TableName, 1) and
c.table_schema = parsename(@TableName, 2) ;</value>
c.table_schema = parsename(@TableName, 2)
and cc.is_computed = 0</value>
</data>
<data name="LoadColumnInfo2016andLater" xml:space="preserve">
<value>DECLARE @Tablename nvarchar(100) = '{0}';
Expand All @@ -181,7 +184,7 @@ INNER JOIN sys.schemas s on s.schema_id = o.schema_id
WHERE o.name = parsename(@TableName, 1) and s.name = parsename(@TableName, 2)
);
WITH cc as (
SELECT c.name as COLUMN_NAME, c.is_identity, c.generated_always_type
SELECT c.name as COLUMN_NAME, c.is_identity, c.generated_always_type, c.is_computed
from sys.objects o
INNER JOIN sys.columns c ON c.object_id = o.object_id
WHERE o.object_id = @oid
Expand All @@ -192,6 +195,7 @@ LEFT JOIN (
select tc.TABLE_SCHEMA, tc.TABLE_NAME, kcu.COLUMN_NAME, tc.constraint_type
from information_schema.table_constraints tc
join information_schema.key_column_usage kcu on
tc.table_schema = kcu.table_schema and
tc.table_name = kcu.table_name and
tc.constraint_name = kcu.constraint_name
where tc.table_name = parsename(@TableName, 1) and
Expand All @@ -200,7 +204,8 @@ LEFT JOIN (
) as co on co.TABLE_SCHEMA = c.TABLE_SCHEMA and co.TABLE_NAME = c.TABLE_NAME and co.COLUMN_NAME = c.COLUMN_NAME
LEFT JOIN cc ON cc.COLUMN_NAME = c.COLUMN_NAME
where c.table_name = parsename(@TableName, 1)
and c.table_schema = parsename(@TableName, 2)
and cc.generated_always_type = 0</value>
and c.table_schema = parsename(@TableName, 2)
and cc.generated_always_type = 0
and cc.is_computed = 0</value>
</data>
</root>
43 changes: 38 additions & 5 deletions ScriptWriter.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Data;
using System.IO;
Expand All @@ -15,14 +17,20 @@ public class ScriptWriter
private DataTable _dt;
DataView _dv;
public bool OptionProcWrapUp = false;
private string _BatchSeparator = "GO";
private string _BatchSeparator = "GO";
private List<string> _excludeDataTypes = new List<string>();


public ScriptWriter(CAMOsoft.DbUtils.MsSqlSession db, string outputFolder)
{
_db = db;
_OutputFolder = outputFolder;
string sql = "SELECT @@SPID AS SPID, SUSER_NAME() AS UserName, DB_NAME() AS DbName, @@SERVERNAME AS ServerName, @@VERSION as ServerVersion;";
_ServerInfoRow = _db.SelectRow(sql);
_ServerInfoRow = _db.SelectRow(sql);

if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["excludeDataTypes"]))
_excludeDataTypes = new List<string>(ConfigurationManager.AppSettings["excludeDataTypes"].Split(new char[] { ';' }));

InitTable();
}

Expand Down Expand Up @@ -92,8 +100,21 @@ private DataTable LoadColumnsInfo(ScriptObject so)
if (IsSQLServer2016orLater()) queryDef = "LoadColumnInfo2016andLater";
string sql = Properties.Resources.ResourceManager.GetString(queryDef);
sql = sql.Replace("{0}", so.FullName);
DataTable dt = _db.SelectTable(sql, "ColumnInfo");
return dt;
DataTable dt = _db.SelectTable(sql, "ColumnInfo");
string filter = string.Empty;

if(_excludeDataTypes.Count >= 1)
filter = string.Format("DATA_TYPE NOT in ({0})", string.Join(",", _excludeDataTypes.Select(x => string.Format("'{0}'", x))));

var filteredDr = dt.Select(filter);
var filteredDt = new DataTable();

if (filteredDr.Length != 0)
filteredDt = filteredDr.CopyToDataTable();
filteredDt.TableName = dt.TableName;

return filteredDt;

}

private bool IsSQLServer2016orLater()
Expand Down Expand Up @@ -167,7 +188,10 @@ private StringBuilder SerializeRowValues(DataRow row, DataTable colInfoTable, st
case "binary":
case "varbinary":
v = "0x" + ByteArrayToHex((byte[])row[col]);
break;
break;
case "datetimeoffset":
v = String.Format("'{0:yyyyMMdd HH:mm:ss.fffffff} {1}'", row[col], row[col].ToString().Substring(row[col].ToString().Length - 6));
break;
default:
throw new Exception("Unknown SQL data type! (" + sqltype + ")");
}
Expand Down Expand Up @@ -427,6 +451,15 @@ private void ScriptTableInitialInsert(ScriptObject so, DataTable colInfoTable, D
}


public string OutputFolder
{
get
{
return _OutputFolder;
}
}


public string UserName {
get
{
Expand Down
5 changes: 5 additions & 0 deletions frmMain.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,11 @@ private void bbiScript_ItemClick(object sender, DevExpress.XtraBars.ItemClickEve
cnt++;
}
barStaticItem1.Caption = String.Format("Done. {0} tables were scripted.", cnt);
DialogResult r = MessageBox.Show( "Do you want to open target location with File Explorer?", "Open target location", MessageBoxButtons.YesNo);
if (r == DialogResult.Yes)
{
Process.Start("explorer.exe", _gen.OutputFolder);
}
}

private void gridControl1_DoubleClick(object sender, EventArgs e)
Expand Down

0 comments on commit 92a8527

Please sign in to comment.