mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-08-23 22:11:36 +08:00
Update gbase
This commit is contained in:
parent
260e537709
commit
b31e3f88e4
@ -1,8 +1,9 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.Odbc;
|
||||
using System.Text;
|
||||
using GBS.Data.GBasedbt;
|
||||
|
||||
namespace SqlSugar.GBase
|
||||
{
|
||||
/// <summary>
|
||||
@ -10,15 +11,15 @@ namespace SqlSugar.GBase
|
||||
/// </summary>
|
||||
public class GBaseDataAdapter : IDataAdapter
|
||||
{
|
||||
private OdbcCommand command;
|
||||
private GbsCommand command;
|
||||
private string sql;
|
||||
private OdbcConnection _sqlConnection;
|
||||
private GbsConnection _sqlConnection;
|
||||
|
||||
/// <summary>
|
||||
/// SqlDataAdapter
|
||||
/// </summary>
|
||||
/// <param name="command"></param>
|
||||
public GBaseDataAdapter(OdbcCommand command)
|
||||
public GBaseDataAdapter(GbsCommand command)
|
||||
{
|
||||
this.command = command;
|
||||
}
|
||||
@ -33,7 +34,7 @@ namespace SqlSugar.GBase
|
||||
/// </summary>
|
||||
/// <param name="sql"></param>
|
||||
/// <param name="_sqlConnection"></param>
|
||||
public GBaseDataAdapter(string sql, OdbcConnection _sqlConnection)
|
||||
public GBaseDataAdapter(string sql, GbsConnection _sqlConnection)
|
||||
{
|
||||
this.sql = sql;
|
||||
this._sqlConnection = _sqlConnection;
|
||||
@ -42,13 +43,13 @@ namespace SqlSugar.GBase
|
||||
/// <summary>
|
||||
/// SelectCommand
|
||||
/// </summary>
|
||||
public OdbcCommand SelectCommand
|
||||
public GbsCommand SelectCommand
|
||||
{
|
||||
get
|
||||
{
|
||||
if (this.command == null)
|
||||
{
|
||||
var conn = (OdbcConnection)this._sqlConnection;
|
||||
var conn = (GbsConnection)this._sqlConnection;
|
||||
this.command = conn.CreateCommand();
|
||||
this.command.CommandText = sql;
|
||||
}
|
||||
|
@ -34,7 +34,6 @@ namespace SqlSugar.GBase
|
||||
}
|
||||
public static List<KeyValuePair<string, CSharpDataType>> MappingTypesConst = new List<KeyValuePair<string, CSharpDataType>>()
|
||||
{
|
||||
new KeyValuePair<string, CSharpDataType>("numeric",CSharpDataType.@long),
|
||||
new KeyValuePair<string, CSharpDataType>("bigint",CSharpDataType.@long),
|
||||
new KeyValuePair<string, CSharpDataType>("blob",CSharpDataType.byteArray),
|
||||
new KeyValuePair<string, CSharpDataType>("boolean",CSharpDataType.@bool),
|
||||
@ -42,7 +41,7 @@ namespace SqlSugar.GBase
|
||||
new KeyValuePair<string, CSharpDataType>("varchar", CSharpDataType.@string),
|
||||
new KeyValuePair<string, CSharpDataType>("char",CSharpDataType.@string),
|
||||
new KeyValuePair<string, CSharpDataType>("clob",CSharpDataType.@string),
|
||||
new KeyValuePair<string, CSharpDataType>("DATETIME YEAR TO FRACTION(3)", CSharpDataType.DateTime),
|
||||
new KeyValuePair<string, CSharpDataType>("DATETIME YEAR TO FRACTION(5)", CSharpDataType.DateTime),
|
||||
new KeyValuePair<string, CSharpDataType>("datetime", CSharpDataType.DateTime),
|
||||
new KeyValuePair<string, CSharpDataType>("date", CSharpDataType.DateTime),
|
||||
new KeyValuePair<string, CSharpDataType>("decimal", CSharpDataType.@decimal),
|
||||
|
@ -6,8 +6,8 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Linq;
|
||||
using System.Data.Odbc;
|
||||
using System.Text.RegularExpressions;
|
||||
using GBS.Data.GBasedbt;
|
||||
|
||||
namespace SqlSugar.GBase
|
||||
{
|
||||
@ -22,7 +22,7 @@ namespace SqlSugar.GBase
|
||||
{
|
||||
try
|
||||
{
|
||||
base._DbConnection = new OdbcConnection(base.Context.CurrentConnectionConfig.ConnectionString);
|
||||
base._DbConnection = new GbsConnection(base.Context.CurrentConnectionConfig.ConnectionString);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@ -67,14 +67,14 @@ namespace SqlSugar.GBase
|
||||
{
|
||||
if (this.Context.Ado.Transaction != null)
|
||||
{
|
||||
return await GetScalarAsync(sql, parameters);
|
||||
return await _GetScalarAsync(sql, parameters);
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
this.Context.Ado.BeginTran();
|
||||
var result =await GetScalarAsync(sql, parameters);
|
||||
var result = await _GetScalarAsync(sql, parameters);
|
||||
this.Context.Ado.CommitTran();
|
||||
return result;
|
||||
}
|
||||
@ -135,12 +135,20 @@ namespace SqlSugar.GBase
|
||||
{
|
||||
var sqlParts = Regex.Split(sql, this.SplitCommandTag).Where(it => !string.IsNullOrEmpty(it)).ToList();
|
||||
int result = 0;
|
||||
int i = 0;
|
||||
foreach (var item in sqlParts)
|
||||
{
|
||||
if (item.TrimStart('\r').TrimStart('\n') != "")
|
||||
{
|
||||
result += base.ExecuteCommand(item, parameters);
|
||||
// parameter name which has prefix is add by AddBatchInsertParameters().
|
||||
// it should be passed to Command row by row.
|
||||
// the parameter which has same prefix is in the same row.
|
||||
var namePrefix = i.ToString() + this.Context.Ado.SqlParameterKeyWord;
|
||||
var paramParts = parameters.Where(o => string.Compare(o.ParameterName, 0, namePrefix, 0, namePrefix.Length) == 0).ToArray();
|
||||
|
||||
result += base.ExecuteCommand(item, paramParts.Length > 0 ? paramParts : parameters);
|
||||
}
|
||||
++i;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -156,12 +164,20 @@ namespace SqlSugar.GBase
|
||||
{
|
||||
var sqlParts = Regex.Split(sql, this.SplitCommandTag).Where(it => !string.IsNullOrEmpty(it)).ToList();
|
||||
int result = 0;
|
||||
int i = 0;
|
||||
foreach (var item in sqlParts)
|
||||
{
|
||||
if (item.TrimStart('\r').TrimStart('\n') != "")
|
||||
{
|
||||
result +=await base.ExecuteCommandAsync(item, parameters);
|
||||
// parameter name which has prefix is add by AddBatchInsertParameters().
|
||||
// it should be passed to Command row by row.
|
||||
// the parameter which has same prefix is in the same row.
|
||||
var namePrefix = i.ToString() + this.Context.Ado.SqlParameterKeyWord;
|
||||
var paramParts = parameters.Where(o => string.Compare(o.ParameterName, 0, namePrefix, 0, namePrefix.Length) == 0).ToArray();
|
||||
|
||||
result += await base.ExecuteCommandAsync(item, paramParts.Length > 0 ? paramParts : parameters);
|
||||
}
|
||||
++i;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -178,7 +194,7 @@ namespace SqlSugar.GBase
|
||||
public override void BeginTran(string transactionName)
|
||||
{
|
||||
CheckConnection();
|
||||
base.Transaction = ((OdbcConnection)this.Connection).BeginTransaction();
|
||||
base.Transaction = ((GbsConnection)this.Connection).BeginTransaction();
|
||||
}
|
||||
/// <summary>
|
||||
/// Only GBase
|
||||
@ -188,7 +204,7 @@ namespace SqlSugar.GBase
|
||||
public override void BeginTran(IsolationLevel iso, string transactionName)
|
||||
{
|
||||
CheckConnection();
|
||||
base.Transaction = ((OdbcConnection)this.Connection).BeginTransaction(iso);
|
||||
base.Transaction = ((GbsConnection)this.Connection).BeginTransaction(iso);
|
||||
}
|
||||
|
||||
public override IDataAdapter GetAdapter()
|
||||
@ -199,19 +215,67 @@ namespace SqlSugar.GBase
|
||||
{
|
||||
var helper = new GBaseInsertBuilder();
|
||||
helper.Context = this.Context;
|
||||
GbsCommand sqlCommand = ((GbsConnection)this.Connection).CreateCommand();
|
||||
if (parameters != null)
|
||||
{
|
||||
var bigObjectParams = parameters.Where(o => sql.Contains(o.ParameterName) &&UtilMethods.HasBigObjectParam(o)).ToList<SugarParameter>();
|
||||
|
||||
foreach (var param in bigObjectParams)
|
||||
{
|
||||
// for big object data, in the insert or update statements
|
||||
// the charactor after the @ParameterName could only be , or ) or space.
|
||||
// here use these characters as postfix of the parameter name.
|
||||
// the Replace method would only replace one field each time.
|
||||
sql = sql.Replace(param.ParameterName + ",", " ?, ");
|
||||
sql = sql.Replace(param.ParameterName + ")", " ?) ");
|
||||
sql = sql.Replace(param.ParameterName + " ", " ? ");
|
||||
|
||||
var gbsParam = sqlCommand.CreateParameter();
|
||||
gbsParam.DbType = param.DbType;
|
||||
gbsParam.ParameterName = param.ParameterName;
|
||||
|
||||
// assign GbsType.
|
||||
switch (param.TypeName)
|
||||
{
|
||||
case "blob":
|
||||
gbsParam.GbsType = GbsType.Blob;
|
||||
gbsParam.Value = (param.Value == null) ? string.Empty : param.Value;
|
||||
break;
|
||||
case "clob":
|
||||
gbsParam.GbsType = GbsType.Clob;
|
||||
gbsParam.Value = (param.Value == null) ? string.Empty : param.Value;
|
||||
break;
|
||||
case "text":
|
||||
gbsParam.GbsType = GbsType.Text;
|
||||
gbsParam.Value = (param.Value == null) ? DBNull.Value : param.Value;
|
||||
break;
|
||||
case "byte":
|
||||
default:
|
||||
gbsParam.GbsType = GbsType.Byte;
|
||||
gbsParam.Value = (param.Value == null) ? DBNull.Value : param.Value;
|
||||
break;
|
||||
}
|
||||
|
||||
sqlCommand.Parameters.Add(gbsParam);
|
||||
}
|
||||
foreach (var param in parameters.OrderByDescending(it => it.ParameterName.Length))
|
||||
{
|
||||
sql = sql.Replace(param.ParameterName, helper.FormatValue(param.Value) + "");
|
||||
if (sql.Contains(param.ParameterName) && UtilMethods.HasBigObjectParam(param))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
sql = sql.Replace(param.ParameterName, helper.FormatValue(param.Value) + "");
|
||||
}
|
||||
}
|
||||
}
|
||||
OdbcCommand sqlCommand = new OdbcCommand(sql, (OdbcConnection)this.Connection);
|
||||
sqlCommand.CommandText = sql;
|
||||
sqlCommand.CommandType = this.CommandType;
|
||||
sqlCommand.CommandTimeout = this.CommandTimeOut;
|
||||
if (this.Transaction != null)
|
||||
{
|
||||
sqlCommand.Transaction = (OdbcTransaction)this.Transaction;
|
||||
sqlCommand.Transaction = (GbsTransaction)this.Transaction;
|
||||
}
|
||||
//if (parameters.HasValue())
|
||||
//{
|
||||
@ -223,7 +287,7 @@ namespace SqlSugar.GBase
|
||||
}
|
||||
public override void SetCommandToAdapter(IDataAdapter dataAdapter, DbCommand command)
|
||||
{
|
||||
((GBaseDataAdapter)dataAdapter).SelectCommand = (OdbcCommand)command;
|
||||
((GBaseDataAdapter)dataAdapter).SelectCommand = (GbsCommand)command;
|
||||
}
|
||||
/// <summary>
|
||||
/// if mysql return MySqlParameter[] pars
|
||||
@ -233,13 +297,13 @@ namespace SqlSugar.GBase
|
||||
/// <returns></returns>
|
||||
public override IDataParameter[] ToIDbDataParameter(params SugarParameter[] parameters)
|
||||
{
|
||||
if (parameters == null || parameters.Length == 0) return new OdbcParameter[] { };
|
||||
OdbcParameter[] result = new OdbcParameter[parameters.Length];
|
||||
if (parameters == null || parameters.Length == 0) return new GbsParameter[] { };
|
||||
GbsParameter[] result = new GbsParameter[parameters.Length];
|
||||
int index = 0;
|
||||
foreach (var parameter in parameters)
|
||||
{
|
||||
if (parameter.Value == null) parameter.Value = DBNull.Value;
|
||||
var sqlParameter = new OdbcParameter();
|
||||
var sqlParameter = new GbsParameter();
|
||||
sqlParameter.ParameterName = parameter.ParameterName;
|
||||
//sqlParameter.UdtTypeName = parameter.UdtTypeName;
|
||||
sqlParameter.Size = parameter.Size;
|
||||
@ -263,15 +327,15 @@ namespace SqlSugar.GBase
|
||||
/// </summary>
|
||||
/// <param name="parameters"></param>
|
||||
/// <returns></returns>
|
||||
public OdbcParameter[] GetSqlParameter(params SugarParameter[] parameters)
|
||||
public GbsParameter[] GetSqlParameter(params SugarParameter[] parameters)
|
||||
{
|
||||
if (parameters == null || parameters.Length == 0) return null;
|
||||
OdbcParameter[] result = new OdbcParameter[parameters.Length];
|
||||
GbsParameter[] result = new GbsParameter[parameters.Length];
|
||||
int index = 0;
|
||||
foreach (var parameter in parameters)
|
||||
{
|
||||
if (parameter.Value == null) parameter.Value = DBNull.Value;
|
||||
var sqlParameter = new OdbcParameter();
|
||||
var sqlParameter = new GbsParameter();
|
||||
sqlParameter.ParameterName = parameter.ParameterName;
|
||||
//sqlParameter.UdtTypeName = parameter.UdtTypeName;
|
||||
sqlParameter.Size = parameter.Size;
|
||||
|
@ -15,9 +15,22 @@ namespace SqlSugar.GBase
|
||||
{
|
||||
if (name.Contains("="))
|
||||
{
|
||||
name = name.Split('=').First().Trim();
|
||||
name = name.Split('=').First();
|
||||
}
|
||||
return name;
|
||||
name = name.Trim(' ');
|
||||
|
||||
if (string.IsNullOrEmpty(SqlTranslationLeft) ||
|
||||
!name.Contains(SqlTranslationLeft))
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
if (!name.Contains(".") && name.StartsWith(SqlTranslationLeft) && name.EndsWith(SqlTranslationRight))
|
||||
{
|
||||
return name.TrimStart(Convert.ToChar(SqlTranslationLeft)).TrimEnd(Convert.ToChar(SqlTranslationRight));
|
||||
}
|
||||
|
||||
return name == null ? string.Empty : Regex.Match(name, @".*" + "\\" + SqlTranslationLeft + "(.*?)" + "\\" + SqlTranslationRight + "").Groups[1].Value;
|
||||
}
|
||||
public override string SqlDateNow
|
||||
{
|
||||
@ -64,5 +77,4 @@ namespace SqlSugar.GBase
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Reflection;
|
||||
@ -24,9 +25,21 @@ namespace SqlSugar.GBase
|
||||
return result;
|
||||
}
|
||||
public override string GetLimit() { return ""; }
|
||||
public override string GetTranslationText(string name)
|
||||
{
|
||||
if (name.Contains('.'))
|
||||
{
|
||||
// add "\"" to support alias name format : table.column
|
||||
// delimident=y should be added to connection string.
|
||||
return base.GetTranslationText("\"" + name + "\"");
|
||||
}
|
||||
|
||||
return base.GetTranslationText(name);
|
||||
}
|
||||
}
|
||||
public partial class GBaseMethod : DefaultDbMethod, IDbMethods
|
||||
{
|
||||
private string _dateTimeType = "datetime year to fraction(5)";
|
||||
public override string Length(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
@ -37,7 +50,16 @@ namespace SqlSugar.GBase
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter1 = model.Args[1];
|
||||
return string.Format("NVL({0},{1})", parameter.MemberName, parameter1.MemberName);
|
||||
string str = string.Format("NVL({0},{1})", parameter.MemberName, parameter1.MemberName);
|
||||
|
||||
if (parameter1 != null && parameter1.MemberValue != null)
|
||||
{
|
||||
if (parameter1.MemberValue.GetType() == UtilConstants.DateType)
|
||||
{
|
||||
str += string.Format("::{0}", _dateTimeType);
|
||||
}
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
public override string MergeString(params string[] strings)
|
||||
@ -61,14 +83,56 @@ namespace SqlSugar.GBase
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter2 = model.Args[1];
|
||||
string str = string.Empty;
|
||||
if (parameter.MemberName != null && parameter.MemberName is DateTime)
|
||||
{
|
||||
return string.Format(" datepart({0},'{1}') ", parameter2.MemberValue, parameter.MemberName);
|
||||
switch (parameter2.MemberValue.ToString().ToLower())
|
||||
{
|
||||
case "year":
|
||||
str = string.Format(" year('{0}'::{1}) ", parameter.MemberName, _dateTimeType);
|
||||
break;
|
||||
case "month":
|
||||
str = string.Format(" month('{0}'::{1}) ", parameter.MemberName, _dateTimeType);
|
||||
break;
|
||||
case "day":
|
||||
str = string.Format(" day('{0}'::{1}) ", parameter.MemberName, _dateTimeType);
|
||||
break;
|
||||
case "hour":
|
||||
str = string.Format(" extend('{0}'::{1}, hour to hour) ", parameter.MemberName, _dateTimeType);
|
||||
break;
|
||||
case "minute":
|
||||
str = string.Format(" extend('{0}'::{1}, minute to minute) ", parameter.MemberName, _dateTimeType);
|
||||
break;
|
||||
case "second":
|
||||
str = string.Format(" extend('{0}'::{1}, second to second) ", parameter.MemberName, _dateTimeType);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return string.Format(" datepart({0},{1}) ", parameter2.MemberValue, parameter.MemberName);
|
||||
switch (parameter2.MemberValue.ToString().ToLower())
|
||||
{
|
||||
case "year":
|
||||
str = string.Format(" year({0}::{1}) ", parameter.MemberName, _dateTimeType);
|
||||
break;
|
||||
case "month":
|
||||
str = string.Format(" month({0}::{1}) ", parameter.MemberName, _dateTimeType);
|
||||
break;
|
||||
case "day":
|
||||
str = string.Format(" day({0}::{1}) ", parameter.MemberName, _dateTimeType);
|
||||
break;
|
||||
case "hour":
|
||||
str = string.Format(" extend({0}::{1}, hour to hour)::varchar(2) ", parameter.MemberName, _dateTimeType);
|
||||
break;
|
||||
case "minute":
|
||||
str = string.Format(" extend({0}::{1}, minute to minute)::varchar(2) ", parameter.MemberName, _dateTimeType);
|
||||
break;
|
||||
case "second":
|
||||
str = string.Format(" extend({0}::{1}, second to second)::varchar(2) ", parameter.MemberName, _dateTimeType);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return str;
|
||||
}
|
||||
public override string GetDate()
|
||||
{
|
||||
@ -110,5 +174,59 @@ namespace SqlSugar.GBase
|
||||
var parameter2 = model.Args[1];
|
||||
return string.Format(" ({0} like '%'||{1}) ", parameter.MemberName, parameter2.MemberName);
|
||||
}
|
||||
public override string DateDiff(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter2 = model.Args[1];
|
||||
var parameter3 = model.Args[2];
|
||||
return string.Format(" DATEDIFF('{0}',{1},{2}) ", parameter.MemberValue?.ToString().ToSqlFilter(), parameter2.MemberName, parameter3.MemberName);
|
||||
}
|
||||
public override string ToString(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
return string.Format(" CAST({0} AS NVARCHAR(4000))", parameter.MemberName);
|
||||
}
|
||||
|
||||
public override string EqualTrue(string fieldName)
|
||||
{
|
||||
return "( " + fieldName + "='t' )";
|
||||
}
|
||||
|
||||
public override string ToDate(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
return string.Format(" CAST({0} AS DATETIME year to fraction(5))", parameter.MemberName);
|
||||
}
|
||||
|
||||
public override string DateAddByType(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter2 = model.Args[1];
|
||||
var parameter3 = model.Args[2];
|
||||
string str = string.Empty;
|
||||
switch (parameter3.MemberValue.ToString().ToLower())
|
||||
{
|
||||
case "year":
|
||||
str = string.Format(" ({0}::{2}+ {1} units year)", parameter.MemberName, parameter2.MemberName, _dateTimeType);
|
||||
break;
|
||||
case "month":
|
||||
str = string.Format(" ({0}::{2}+ {1} units month)", parameter.MemberName, parameter2.MemberName, _dateTimeType);
|
||||
break;
|
||||
case "day":
|
||||
str = string.Format(" ({0}::{2}+ {1} units day)", parameter.MemberName, parameter2.MemberName, _dateTimeType);
|
||||
break;
|
||||
case "hour":
|
||||
str = string.Format(" ({0}::{2}+ {1} units hour)", parameter.MemberName, parameter2.MemberName, _dateTimeType);
|
||||
break;
|
||||
case "minute":
|
||||
str = string.Format(" ({0}::{2}+ {1} units minute)", parameter.MemberName, parameter2.MemberName, _dateTimeType);
|
||||
break;
|
||||
case "second":
|
||||
str = string.Format(" ({0}::{2}+ {1} units second)", parameter.MemberName, parameter2.MemberName, _dateTimeType);
|
||||
break;
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8,6 +8,8 @@ namespace SqlSugar.GBase
|
||||
{
|
||||
public class GBaseInsertBuilder:InsertBuilder
|
||||
{
|
||||
private string _getAutoGeneratedKeyValueSql = " select case when dbinfo('serial8') <> 0 then dbinfo('serial8') when dbinfo('bigserial') <> 0 then dbinfo('bigserial') else dbinfo('sqlca.sqlerrd1') end from dual";
|
||||
|
||||
public override string SqlTemplateBatch
|
||||
{
|
||||
get
|
||||
@ -24,15 +26,14 @@ namespace SqlSugar.GBase
|
||||
return @"INSERT INTO {0}
|
||||
({1})
|
||||
VALUES
|
||||
({2})"+UtilConstants.ReplaceCommaKey.Replace("{","").Replace("}", "") + " SELECT dbinfo('sqlca.sqlerrd1') FROM dual";
|
||||
({2})"+UtilConstants.ReplaceCommaKey.Replace("{","").Replace("}", "") + _getAutoGeneratedKeyValueSql;
|
||||
}
|
||||
else
|
||||
{
|
||||
return @"INSERT INTO {0}
|
||||
({1})
|
||||
VALUES
|
||||
({2}) "+UtilConstants.ReplaceCommaKey.Replace("{", "").Replace("}", "") + "SELECT dbinfo('sqlca.sqlerrd1') FROM dual";
|
||||
|
||||
({2}) ";
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -41,10 +42,6 @@ namespace SqlSugar.GBase
|
||||
get
|
||||
{
|
||||
var result = Builder.GetTranslationTableName(EntityInfo.EntityName);
|
||||
if (this.AsName.HasValue())
|
||||
{
|
||||
return Builder.GetTranslationTableName(this.AsName);
|
||||
}
|
||||
result += UtilConstants.Space;
|
||||
if (this.TableWithString.HasValue())
|
||||
{
|
||||
@ -64,7 +61,18 @@ namespace SqlSugar.GBase
|
||||
string columnsString = string.Join(",", groupList.First().Select(it => Builder.GetTranslationColumnName(it.DbColumnName)));
|
||||
if (isSingle)
|
||||
{
|
||||
string columnParametersString = string.Join(",", this.DbColumnInfoList.Select(it =>base.GetDbColumn(it, Builder.SqlParameterKeyWord + it.DbColumnName)));
|
||||
// copy the SugarColumn(ColumnDataType) to parameter.TypeName
|
||||
var bigObjectColumns = groupList.ToList().First().Where(o => !string.IsNullOrEmpty(o.DataType)).ToList();
|
||||
foreach (var column in bigObjectColumns)
|
||||
{
|
||||
var columnName = Builder.SqlParameterKeyWord + column.DbColumnName;
|
||||
var param = this.Parameters.Where(o => string.Compare(o.ParameterName, columnName) == 0).FirstOrDefault();
|
||||
if (param.HasValue())
|
||||
{
|
||||
param.TypeName = column.DataType.ToLower();
|
||||
}
|
||||
}
|
||||
string columnParametersString = string.Join(",", this.DbColumnInfoList.Select(it => base.GetDbColumn(it, Builder.SqlParameterKeyWord + it.DbColumnName)));
|
||||
return string.Format(SqlTemplate, GetTableNameString, columnsString, columnParametersString);
|
||||
}
|
||||
else
|
||||
@ -74,23 +82,53 @@ namespace SqlSugar.GBase
|
||||
int pageIndex = 1;
|
||||
int totalRecord = groupList.Count;
|
||||
int pageCount = (totalRecord + pageSize - 1) / pageSize;
|
||||
Boolean hasBigObjectColumn = groupList.First().Where(o => UtilMethods.HasBigObjectColumn(o)).Count() > 0;
|
||||
|
||||
if (this.Parameters != null) this.Parameters.Clear();
|
||||
|
||||
while (pageCount >= pageIndex)
|
||||
{
|
||||
batchInsetrSql.AppendFormat(SqlTemplateBatch, GetTableNameString, columnsString);
|
||||
batchInsetrSql.AppendFormat("SELECT * FROM (");
|
||||
if (!hasBigObjectColumn)
|
||||
{
|
||||
batchInsetrSql.AppendFormat(SqlTemplateBatch, GetTableNameString, columnsString);
|
||||
batchInsetrSql.AppendFormat("SELECT * FROM (");
|
||||
}
|
||||
int i = 0;
|
||||
foreach (var columns in groupList.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList())
|
||||
{
|
||||
var isFirst = i == 0;
|
||||
if (!isFirst)
|
||||
if (!hasBigObjectColumn)
|
||||
{
|
||||
batchInsetrSql.Append(SqlTemplateBatchUnion);
|
||||
if (!isFirst)
|
||||
{
|
||||
batchInsetrSql.Append(SqlTemplateBatchUnion);
|
||||
}
|
||||
batchInsetrSql.Append("\r\n SELECT " + string.Join(",", columns.Select(it => string.Format(SqlTemplateBatchSelect, base.GetDbColumn(it, FormatValue(it.Value)), Builder.GetTranslationColumnName(it.DbColumnName)))) + " from dual");
|
||||
}
|
||||
else
|
||||
{
|
||||
// has big object column.
|
||||
if (!isFirst)
|
||||
{
|
||||
batchInsetrSql.Append(UtilConstants.ReplaceCommaKey.Replace("{", "").Replace("}", " "));
|
||||
}
|
||||
|
||||
// generate batch insert sqlstatements, which has big object datatype column.
|
||||
batchInsetrSql.AppendFormat(SqlTemplateBatch, GetTableNameString, columnsString);
|
||||
batchInsetrSql.AppendFormat(" Values (");
|
||||
batchInsetrSql.AppendFormat(string.Join(",", columns.Select(it => base.GetDbColumn(it, i + Builder.SqlParameterKeyWord + it.DbColumnName + i))));
|
||||
batchInsetrSql.AppendFormat(");");
|
||||
|
||||
// multiple rows data would be added to the parameters
|
||||
this.AddBatchInsertParameters(columns, i);
|
||||
}
|
||||
batchInsetrSql.Append("\r\n SELECT " + string.Join(",", columns.Select(it => string.Format(SqlTemplateBatchSelect, base.GetDbColumn(it,FormatValue(it.Value)), Builder.GetTranslationColumnName(it.DbColumnName))))+" from dual");
|
||||
++i;
|
||||
}
|
||||
pageIndex++;
|
||||
batchInsetrSql.Append(") temp1\r\n;\r\n");
|
||||
if (!hasBigObjectColumn)
|
||||
{
|
||||
batchInsetrSql.Append(") temp1\r\n;\r\n");
|
||||
}
|
||||
}
|
||||
var result = batchInsetrSql.ToString();
|
||||
//if (this.Context.CurrentConnectionConfig.DbType == DbType.GBase)
|
||||
@ -127,7 +165,7 @@ namespace SqlSugar.GBase
|
||||
{
|
||||
if (this.Context.CurrentConnectionConfig.MoreSettings?.TableEnumIsString == true)
|
||||
{
|
||||
return value.ToSqlValue(); ;
|
||||
return value.ToSqlValue();
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -138,6 +176,14 @@ namespace SqlSugar.GBase
|
||||
{
|
||||
return string.Format("CAST({0} AS boolean)", value.ObjToBool()?1:0) ;
|
||||
}
|
||||
else if (type == UtilConstants.IntType ||
|
||||
type == UtilConstants.LongType ||
|
||||
type == UtilConstants.ShortType ||
|
||||
type == UtilConstants.FloatType ||
|
||||
type == UtilConstants.DobType)
|
||||
{
|
||||
return value;
|
||||
}
|
||||
else
|
||||
{
|
||||
return n + "'" + value + "'";
|
||||
@ -164,5 +210,71 @@ namespace SqlSugar.GBase
|
||||
return "'" + date.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'";
|
||||
}
|
||||
|
||||
// the method below is copied from InsertableHelper.cs
|
||||
private static void ArrayNull(DbColumnInfo item, SugarParameter parameter)
|
||||
{
|
||||
if (item.PropertyType.IsIn(typeof(Guid[]), typeof(Guid?[])))
|
||||
{
|
||||
parameter.DbType = System.Data.DbType.Guid;
|
||||
}
|
||||
else if (item.PropertyType.IsIn(typeof(int[]), typeof(int?[])))
|
||||
{
|
||||
parameter.DbType = System.Data.DbType.Int32;
|
||||
}
|
||||
else if (item.PropertyType.IsIn(typeof(long[]), typeof(long?[])))
|
||||
{
|
||||
parameter.DbType = System.Data.DbType.Int64;
|
||||
}
|
||||
else if (item.PropertyType.IsIn(typeof(short[]), typeof(short?[])))
|
||||
{
|
||||
parameter.DbType = System.Data.DbType.Int16;
|
||||
}
|
||||
}
|
||||
|
||||
// The code in AddBatchInsertParameters are copied from PreToSql() in InsertableHelper.cs
|
||||
private void AddBatchInsertParameters(IGrouping<int, DbColumnInfo> columns, int rowIndex)
|
||||
{
|
||||
var isDic = this.EntityInfo.DbTableName.StartsWith("Dictionary`");
|
||||
foreach (var item in columns)
|
||||
{
|
||||
if (this.Parameters == null) this.Parameters = new List<SugarParameter>();
|
||||
var paramters = new SugarParameter(rowIndex + Builder.SqlParameterKeyWord + item.DbColumnName + rowIndex, item.Value, item.PropertyType);
|
||||
if (IsNoInsertNull && paramters.Value == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (item.SqlParameterDbType is Type)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (item.IsJson)
|
||||
{
|
||||
paramters.IsJson = true;
|
||||
Builder.ChangeJsonType(paramters);
|
||||
}
|
||||
if (item.IsArray)
|
||||
{
|
||||
paramters.IsArray = true;
|
||||
if (item.Value == null || item.Value == DBNull.Value)
|
||||
{
|
||||
ArrayNull(item, paramters);
|
||||
}
|
||||
|
||||
}
|
||||
if (item.Value == null && isDic)
|
||||
{
|
||||
var type = this.Builder.GetNullType(this.GetTableNameString, item.DbColumnName);
|
||||
if (type != null)
|
||||
{
|
||||
paramters = new SugarParameter(rowIndex + this.Builder.SqlParameterKeyWord + item.DbColumnName + rowIndex, item.Value, type);
|
||||
}
|
||||
}
|
||||
if (!string.IsNullOrEmpty(item.DataType))
|
||||
{
|
||||
paramters.TypeName = item.DataType.ToLower();
|
||||
}
|
||||
this.Parameters.Add(paramters);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -17,7 +17,7 @@ namespace SqlSugar.GBase
|
||||
/*
|
||||
SELECT * FROM TABLE WHERE CONDITION ORDER BY ID DESC LIMIT 0,10
|
||||
*/
|
||||
var template = "SELECT {0} FROM {1} {2} {3} {4} LIMIT {5},{6}";
|
||||
var template = "SELECT SKIP {5} FIRST {6} {0} FROM {1} {2} {3} {4} ";
|
||||
return template;
|
||||
}
|
||||
}
|
||||
@ -34,7 +34,7 @@ namespace SqlSugar.GBase
|
||||
#region Common Methods
|
||||
public override bool IsComplexModel(string sql)
|
||||
{
|
||||
return Regex.IsMatch(sql, @"AS \`\w+\.\w+\`") || Regex.IsMatch(sql, @"AS \`\w+\.\w+\.\w+\`");
|
||||
return Regex.IsMatch(sql, @"AS ""\w+\.\w+""") || Regex.IsMatch(sql, @"AS ""\w+\.\w+\.\w+""");
|
||||
}
|
||||
public override string ToSqlString()
|
||||
{
|
||||
|
@ -4,11 +4,20 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using SqlSugar;
|
||||
|
||||
namespace SqlSugar.GBase
|
||||
{
|
||||
public class GBaseUpdateBuilder : UpdateBuilder
|
||||
{
|
||||
public override string SqlTemplate
|
||||
{
|
||||
get
|
||||
{
|
||||
return @"UPDATE {0} SET {1} {2}";
|
||||
|
||||
}
|
||||
}
|
||||
protected override string TomultipleSqlString(List<IGrouping<int, DbColumnInfo>> groupList)
|
||||
{
|
||||
if (groupList == null || groupList.Count == 0)
|
||||
@ -31,7 +40,7 @@ namespace SqlSugar.GBase
|
||||
whereList.Add(whereString);
|
||||
}
|
||||
i++;
|
||||
return string.Format("{0} {1} WHERE {2} ", updateTable, setValues, string.Join(" AND", whereList));
|
||||
return string.Format("{0} {1} WHERE {2} ", updateTable, setValues, string.Join(" AND ", whereList));
|
||||
}).ToArray()));
|
||||
return sb.ToString();
|
||||
}
|
||||
@ -43,6 +52,73 @@ namespace SqlSugar.GBase
|
||||
{
|
||||
return string.Format("{0}={1}", m.DbColumnName, base.GetDbColumn(m,FormatValue(i, m.DbColumnName, m.Value, iswhere)));
|
||||
}
|
||||
public override object FormatValue(object value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
return "NULL";
|
||||
}
|
||||
else
|
||||
{
|
||||
var type = UtilMethods.GetUnderType(value.GetType());
|
||||
if (type == UtilConstants.DateType)
|
||||
{
|
||||
var date = value.ObjToDate();
|
||||
if (date < UtilMethods.GetMinDate(this.Context.CurrentConnectionConfig))
|
||||
{
|
||||
date = UtilMethods.GetMinDate(this.Context.CurrentConnectionConfig);
|
||||
}
|
||||
return "'" + date.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'";
|
||||
}
|
||||
else if (type == UtilConstants.ByteArrayType)
|
||||
{
|
||||
string bytesString = "0x" + BitConverter.ToString((byte[])value).Replace("-", "");
|
||||
return bytesString;
|
||||
}
|
||||
else if (type.IsEnum())
|
||||
{
|
||||
if (this.Context.CurrentConnectionConfig.MoreSettings?.TableEnumIsString == true)
|
||||
{
|
||||
return value.ToSqlValue();
|
||||
}
|
||||
else
|
||||
{
|
||||
return Convert.ToInt64(value);
|
||||
}
|
||||
}
|
||||
else if (type == UtilConstants.BoolType)
|
||||
{
|
||||
return value.ObjToBool() ? "1" : "0";
|
||||
}
|
||||
else if (type == UtilConstants.DateTimeOffsetType)
|
||||
{
|
||||
return FormatDateTimeOffset(value);
|
||||
}
|
||||
else if (type == UtilConstants.StringType || type == UtilConstants.ObjType)
|
||||
{
|
||||
return "'" + value.ToString().ToSqlFilter() + "'";
|
||||
}
|
||||
else if (type == UtilConstants.IntType || type == UtilConstants.LongType)
|
||||
{
|
||||
return value;
|
||||
}
|
||||
else if (UtilMethods.IsNumber(type.Name))
|
||||
{
|
||||
if (value.ObjToString().Contains(","))
|
||||
{
|
||||
return $"'{value}'";
|
||||
}
|
||||
else
|
||||
{
|
||||
return value;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return "'" + value.ToString() + "'";
|
||||
}
|
||||
}
|
||||
}
|
||||
public object FormatValue(int i, string name, object value, bool iswhere)
|
||||
{
|
||||
if (value == null)
|
||||
@ -70,7 +146,7 @@ namespace SqlSugar.GBase
|
||||
}
|
||||
else if (type == UtilConstants.DateType && iswhere)
|
||||
{
|
||||
var parameterName = this.Builder.SqlParameterKeyWord + name + i;
|
||||
var parameterName = i + this.Builder.SqlParameterKeyWord + name + i;
|
||||
this.Parameters.Add(new SugarParameter(parameterName, value));
|
||||
return parameterName;
|
||||
}
|
||||
@ -87,7 +163,7 @@ namespace SqlSugar.GBase
|
||||
}
|
||||
else if (type == UtilConstants.ByteArrayType)
|
||||
{
|
||||
var parameterName = this.Builder.SqlParameterKeyWord + name + i;
|
||||
var parameterName = i + this.Builder.SqlParameterKeyWord + name + i;
|
||||
this.Parameters.Add(new SugarParameter(parameterName, value));
|
||||
return parameterName;
|
||||
}
|
||||
|
Binary file not shown.
@ -6,7 +6,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="System.Data.Odbc" Version="4.6.0" />
|
||||
<PackageReference Include="GBase.DataProvider" Version="1.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@ -14,7 +14,7 @@
|
||||
<tags>Asp.net core orm</tags>
|
||||
<dependencies>
|
||||
<group targetFramework=".NETStandard2.1">
|
||||
<dependency id="System.Data.Odbc" version="4.6" />
|
||||
<dependency id="GBase.DataProvider" version="1.1.0" />
|
||||
</group>
|
||||
</dependencies>
|
||||
</metadata>
|
||||
|
@ -503,5 +503,101 @@ namespace SqlSugar.GBase
|
||||
// return item.FieldValue;
|
||||
// }
|
||||
//}
|
||||
public static Boolean HasBigObjectParam(SugarParameter param)
|
||||
{
|
||||
return param.HasValue() && !string.IsNullOrEmpty(param.ParameterName) &&
|
||||
(param.DbType == System.Data.DbType.Binary ||
|
||||
(!string.IsNullOrEmpty(param.TypeName) &&
|
||||
(param.TypeName == "blob" ||
|
||||
param.TypeName == "clob" ||
|
||||
param.TypeName == "byte" ||
|
||||
param.TypeName == "text")));
|
||||
}
|
||||
public static Boolean HasBigObjectColumn(DbColumnInfo columnInfo)
|
||||
{
|
||||
return columnInfo.HasValue() &&
|
||||
(columnInfo.PropertyType == UtilConstants.ByteArrayType ||
|
||||
(!string.IsNullOrEmpty(columnInfo.DataType) &&
|
||||
(columnInfo.DataType.ToLower() == "text" ||
|
||||
columnInfo.DataType.ToLower() == "byte" ||
|
||||
columnInfo.DataType.ToLower() == "clob" ||
|
||||
columnInfo.DataType.ToLower() == "blob")));
|
||||
}
|
||||
|
||||
public static bool IsNumber(string ctypename)
|
||||
{
|
||||
if (ctypename.IsNullOrEmpty())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
var item = new ConditionalModel()
|
||||
{
|
||||
CSharpTypeName = ctypename,
|
||||
};
|
||||
if (item.CSharpTypeName.EqualCase(UtilConstants.DecType.Name))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (item.CSharpTypeName.EqualCase(UtilConstants.DobType.Name))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (item.CSharpTypeName.EqualCase(UtilConstants.IntType.Name))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (item.CSharpTypeName.EqualCase(UtilConstants.LongType.Name))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (item.CSharpTypeName.EqualCase(UtilConstants.ShortType.Name))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (item.CSharpTypeName.EqualCase("int"))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (item.CSharpTypeName.EqualCase("long"))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (item.CSharpTypeName.EqualCase("short"))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (item.CSharpTypeName.EqualCase("byte"))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (item.CSharpTypeName.EqualCase("uint"))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (item.CSharpTypeName.EqualCase("ulong"))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (item.CSharpTypeName.EqualCase("ushort"))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (item.CSharpTypeName.EqualCase("uint32"))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (item.CSharpTypeName.EqualCase("uint64"))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (item.CSharpTypeName.EqualCase("uint16"))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
1
Src/Asp.NetCore2/SqlSugar.GBaseCore/data.bat
Normal file
1
Src/Asp.NetCore2/SqlSugar.GBaseCore/data.bat
Normal file
@ -0,0 +1 @@
|
||||
%~dp0nuget.exe pack %~dp0data.nuspec -OutputDirectory %~dp0
|
22
Src/Asp.NetCore2/SqlSugar.GBaseCore/data.nuspec
Normal file
22
Src/Asp.NetCore2/SqlSugar.GBaseCore/data.nuspec
Normal file
@ -0,0 +1,22 @@
|
||||
<?xml version="1.0"?>
|
||||
<package >
|
||||
<metadata>
|
||||
<id>GBase.DataProvider</id>
|
||||
<version>1.1</version>
|
||||
<authors>sunkaixuan</authors>
|
||||
<owners>Landa</owners>
|
||||
<licenseUrl>http://www.apache.org/licenses/LICENSE-2.0.html</licenseUrl>
|
||||
<projectUrl>https://github.com/sunkaixuan/SqlSugar</projectUrl>
|
||||
<iconUrl>https://secure.gravatar.com/avatar/a82c03402497b2e58fd65038a3699b30</iconUrl>
|
||||
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
||||
<description> SqlSugar操作 GBase 南大通用数据库 </description>
|
||||
<copyright>Copyright 2016</copyright>
|
||||
<tags>Asp.net core orm</tags>
|
||||
<dependencies>
|
||||
|
||||
</dependencies>
|
||||
</metadata>
|
||||
<files>
|
||||
<file src="G:\Git\SqlSugar\Src\Asp.NetCore2\SqlSugar.GBaseCore\GeneralData.EntityFrameworkCore.GBase.DataProvider.dll" target="lib\netstandard2.1"></file>
|
||||
</files>
|
||||
</package>
|
Loading…
Reference in New Issue
Block a user