Skip to content

Commit

Permalink
修改 sqlserver 查询 的一些方法
Browse files Browse the repository at this point in the history
  • Loading branch information
toolgood committed Oct 28, 2021
1 parent afa3377 commit d02244e
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,24 @@ public abstract class ExecuteProviderBase
protected static Regex updateSqlRegex = new Regex(@"\bupdate +(.*?) +set +([\s\S]*?)(from +[\s\S]*?)?(where +[\s\S]+)$", RegexOptions.IgnoreCase);
protected static Regex deleteSqlRegex = new Regex(@"\bdelete +from +([^ ]+) +(where [\s\S]+)$", RegexOptions.IgnoreCase);

protected virtual Regex GetSelectRegex()
{
return selectRegex;
}

protected virtual Regex GetInsertUpdateRegex()
{
return insertUpdateRegex;
}

protected virtual Regex GetDeleteRegex()
{
return deleteRegex;
}




public virtual DbCommand CreateCommand(string connStr, string databaseName)
{
var factory = _provider.GetProviderFactory();
Expand All @@ -37,7 +55,7 @@ public virtual DbCommand CreateCommand(string connStr, string databaseName)
#region ExecuteSql
public virtual async Task<ExecuteResult> ExecuteSql_Select(DbCommand command, string sql, int readMaxRows)
{
var m = selectRegex.Match(sql);
var m = GetSelectRegex().Match(sql);
ExecuteResult result = new ExecuteResult();
if (m.Success) {
result.IsException = true;
Expand Down Expand Up @@ -70,7 +88,7 @@ public virtual async Task<ExecuteResult> ExecuteSql_Select(DbCommand command, st

public virtual async Task<ExecuteResult> ExecuteSql_InsertUpdate(DbCommand command, string sql, int readMaxRows, int changeMaxRows)
{
var m = insertUpdateRegex.Match(sql);
var m = GetInsertUpdateRegex().Match(sql);
ExecuteResult result = new ExecuteResult();
if (m.Success) {
result.IsException = true;
Expand Down Expand Up @@ -114,7 +132,7 @@ public virtual async Task<ExecuteResult> ExecuteSql_InsertUpdate(DbCommand comma

public virtual async Task<ExecuteResult> ExecuteSql_Delete(DbCommand command, string sql, int readMaxRows, int changeMaxRows)
{
var m = deleteRegex.Match(sql);
var m = GetDeleteRegex().Match(sql);
ExecuteResult result = new ExecuteResult();
if (m.Success) {
result.IsException = true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using ToolGood.ReadyGo3;
using ToolGood.SqlOnline.Datas.Databases;
using ToolGood.SqlOnline.Dtos;
Expand All @@ -14,14 +15,28 @@ namespace ToolGood.SqlOnline.Plugin.SqlServer
{
public class SqlServerCommonProvider : ExecuteProviderBase, ISqlCommonProvider
{
private new static Regex selectRegex = new Regex(@"\b(delete|insert|update|truncate|call|exec|execute|create|alter|drop|grant|change|backup|trigger|event|merge|rename|index|table|view|function|procedure|proc)\b", RegexOptions.IgnoreCase | RegexOptions.Compiled);
private new static Regex insertUpdateRegex = new Regex(@"\b(delete|truncate|call|exec|execute|create|alter|drop|grant|change|backup|trigger|event|merge|rename|index|table|view|function|procedure|proc)\b", RegexOptions.IgnoreCase | RegexOptions.Compiled);
private new static Regex deleteRegex = new Regex(@"\b(truncate|call|exec|execute|create|alter|drop|grant|change|backup|trigger|event|merge|rename|index|table|view|function|procedure|proc)\b", RegexOptions.IgnoreCase | RegexOptions.Compiled);

public SqlServerCommonProvider()
{
_provider = new SqlServerProvider();
}

private void UseDatabase(SqlHelper helper, string dataBaseName)
protected override Regex GetSelectRegex()
{
return selectRegex;
}

protected override Regex GetInsertUpdateRegex()
{
helper.Execute("Use [" + dataBaseName + "]");
return insertUpdateRegex;
}

protected override Regex GetDeleteRegex()
{
return deleteRegex;
}


Expand Down Expand Up @@ -265,7 +280,7 @@ public SqlEditorDto GetCreateSql(string connStr, string databaseName, string sch
public string GetTableDefinition(string connStr, string dataBaseName, string schemaName, string tableName)
{
var helper = SqlHelperFactory.OpenDatabase(connStr, _provider.GetProviderFactory(), SqlType.SqlServer);
UseDatabase(helper, dataBaseName);
helper.ChangeDatabase(dataBaseName);
const string sql = @"select OBJECT_DEFINITION (d.object_id) AS 'Definition'
FROM sys.objects d
where d.type='U' and SCHEMA_NAME(d.schema_id)=@0 and d.name=@1 ";
Expand All @@ -277,7 +292,7 @@ public string GetTableDefinition(string connStr, string dataBaseName, string sch
public bool ChangeComment(string connStr, string databaseName, string schemaName, string tableName, string comment)
{
var helper = SqlHelperFactory.OpenDatabase(connStr, _provider.GetProviderFactory(), SqlType.SqlServer);
UseDatabase(helper, databaseName);
helper.ChangeDatabase(databaseName);
const string sql = @"IF ((SELECT COUNT(*) from fn_listextendedproperty('MS_Description', 'SCHEMA', @0, 'TABLE', @1, NULL, NULL)) > 0)
EXEC sp_updateextendedproperty @name = N'MS_Description', @value = @2, @level0type = 'SCHEMA', @level0name = @1, @level1type = 'TABLE', @level1name = @2
ELSE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,12 @@ public SqlServerFunctionProvider()
_provider = new SqlServerProvider();
}

private void UseDatabase(SqlHelper helper, string dataBaseName)
{
helper.Execute("Use [" + dataBaseName + "]");
}

public List<FunctionEntity> GetFunctions(string connStr, string databaseName)
{
var sqlHelper = SqlHelperFactory.OpenDatabase(connStr, _provider.GetProviderFactory(), SqlType.SqlServer);
UseDatabase(sqlHelper, databaseName);
sqlHelper.ChangeDatabase(databaseName);

var sql = @"SELECT DB_NAME() DataBaseName,
SCHEMA_NAME(sp.schema_id) SchemaName,
sp.name FunctionName,
Expand All @@ -45,7 +42,8 @@ g.[value] Comment
public List<FunctionParamEntity> GetFunctionParams(string connStr, string databaseName, string schemaName, string functionName)
{
var sqlHelper = SqlHelperFactory.OpenDatabase(connStr, _provider.GetProviderFactory(), SqlType.SqlServer);
UseDatabase(sqlHelper, databaseName);
sqlHelper.ChangeDatabase(databaseName);

var sql = @"SELECT DB_NAME() DataBaseName,
SCHEMA_NAME(pr.schema_id) SchemaName,
pr.name FunctionName,
Expand Down Expand Up @@ -75,7 +73,8 @@ public List<FunctionParamEntity> GetFunctionParams(string connStr, string databa
public FunctionEntity GetFunction(string connStr, string databaseName, string schemaName, string functionName)
{
var sqlHelper = SqlHelperFactory.OpenDatabase(connStr, _provider.GetProviderFactory(), SqlType.SqlServer);
UseDatabase(sqlHelper, databaseName);
sqlHelper.ChangeDatabase(databaseName);

var sql = @"SELECT DB_NAME() DataBaseName,
SCHEMA_NAME(sp.schema_id) SchemaName,
sp.name FunctionName,
Expand Down Expand Up @@ -145,7 +144,8 @@ public SqlEditorDto GetAlterSql(string connStr, string databaseName, string sche
public string GetFunctionDefinition(string connStr, string databaseName, string schemaName, string procedureName)
{
var helper = SqlHelperFactory.OpenDatabase(connStr, _provider.GetProviderFactory(), SqlType.SqlServer);
UseDatabase(helper, databaseName);
helper.ChangeDatabase(databaseName);

var sql2 = @"SELECT OBJECT_DEFINITION (pr.object_id)
FROM sys.objects pr
WHERE pr.type IN ('FN', 'IF', 'TF')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,12 @@ public SqlServerProcedureProvider()
{
_provider = new SqlServerProvider();
}
private void UseDatabase(SqlHelper helper, string dataBaseName)
{
helper.Execute("Use [" + dataBaseName + "]");
}


public List<ProcedureEntity> GetProcedures(string connStr, string databaseName)
{
var sqlHelper = SqlHelperFactory.OpenDatabase(connStr, _provider.GetProviderFactory(), SqlType.SqlServer);
UseDatabase(sqlHelper, databaseName);
sqlHelper.ChangeDatabase(databaseName);

var sql = @"SELECT DB_NAME() DataBaseName,
SCHEMA_NAME(pr.schema_id) SchemaName,
Expand All @@ -45,8 +42,8 @@ g.[value] Comment
public List<ProcedureParamEntity> GetProcedureParams(string connStr, string databaseName, string schemaName, string procedureName)
{
var sqlHelper = SqlHelperFactory.OpenDatabase(connStr, _provider.GetProviderFactory(), SqlType.SqlServer);
sqlHelper.ChangeDatabase(databaseName);

UseDatabase(sqlHelper, databaseName);
var sql = @"SELECT DB_NAME() DataBaseName,
h.name as SchemaName,
pr.name ProcedureName,
Expand Down Expand Up @@ -83,7 +80,7 @@ public List<ProcedureParamEntity> GetProcedureParams(string connStr, string data
public ProcedureEntity GetProcedure(string connStr, string databaseName, string schemaName, string procedureName)
{
var sqlHelper = SqlHelperFactory.OpenDatabase(connStr, _provider.GetProviderFactory(), SqlType.SqlServer);
UseDatabase(sqlHelper, databaseName);
sqlHelper.ChangeDatabase(databaseName);

var sql = @"SELECT DB_NAME() DataBaseName,
SCHEMA_NAME(pr.schema_id) SchemaName,
Expand Down Expand Up @@ -153,7 +150,7 @@ public SqlEditorDto GetAlterSql(string connStr, string databaseName, string sche
public string GetProcedureDefinition(string connStr, string databaseName, string schemaName, string procedureName)
{
var helper = SqlHelperFactory.OpenDatabase(connStr, _provider.GetProviderFactory(), SqlType.SqlServer);
UseDatabase(helper, databaseName);
helper.ChangeDatabase(databaseName);
var sql2 = @"SELECT OBJECT_DEFINITION (pr.object_id)
FROM sys.objects pr
WHERE SCHEMA_NAME(pr.schema_id)=@0 and pr.name=@1";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,12 @@ public SqlServerViewProvider()
{
_provider = new SqlServerProvider();
}
private void UseDatabase(SqlHelper helper, string dataBaseName)
{
helper.Execute("Use [" + dataBaseName + "]");
}

public List<ViewEntity> GetViews(string connStr, string databaseName)
{
var sqlHelper = SqlHelperFactory.OpenDatabase(connStr, _provider.GetProviderFactory(), SqlType.SqlServer);
sqlHelper.ChangeDatabase(databaseName);

UseDatabase(sqlHelper, databaseName);
var sql = @"select DB_NAME() AS DataBaseName ,SCHEMA_NAME(d.schema_id) SchemaName, d.name ViewName,isnull(f.value,'') Comment
FROM sys.objects d
left join sys.extended_properties f on d.object_id=f.major_id and f.minor_id=0
Expand All @@ -44,7 +40,7 @@ public List<ViewColumnEntity> GetViewColumns(string connStr, string databaseName
{
var sqlHelper = SqlHelperFactory.OpenDatabase(connStr, _provider.GetProviderFactory(), SqlType.SqlServer);

UseDatabase(sqlHelper, databaseName);
sqlHelper.ChangeDatabase(databaseName);
var sql = @"SELECT
DB_NAME() AS DataBaseName ,
d.name as ViewName,
Expand Down Expand Up @@ -81,7 +77,7 @@ public ViewEntity GetView(string connStr, string databaseName, string schemaName
{
var sqlHelper = SqlHelperFactory.OpenDatabase(connStr, _provider.GetProviderFactory(), SqlType.SqlServer);

UseDatabase(sqlHelper, databaseName);
sqlHelper.ChangeDatabase(databaseName);
var sql = @"select DB_NAME() AS DataBaseName ,SCHEMA_NAME(d.schema_id) SchemaName, d.name ViewName,isnull(f.value,'') Comment
FROM sys.objects d
left join sys.extended_properties f on d.object_id=f.major_id and f.minor_id=0
Expand Down Expand Up @@ -149,10 +145,10 @@ public SqlEditorDto GetAlterSql(string connStr, string databaseName, string sche
return new SqlEditorDto() { JsMode = _provider.GetJsMode(), SqlType = _provider.GetServerName(), SqlString = stringBuilder.ToString() };
}

public string GetTableDefinition(string connStr, string dataBaseName, string schemaName, string tableName)
public string GetTableDefinition(string connStr, string databaseName, string schemaName, string tableName)
{
var helper = SqlHelperFactory.OpenDatabase(connStr, _provider.GetProviderFactory(), SqlType.SqlServer);
UseDatabase(helper, dataBaseName);
helper.ChangeDatabase(databaseName);
const string sql = @"SELECT OBJECT_DEFINITION (pr.object_id)
FROM sys.objects pr
WHERE pr.type = 'V'
Expand Down

0 comments on commit d02244e

Please sign in to comment.