mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-10-25 02:09:12 +08:00
Update gbase
This commit is contained in:
@@ -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,17 +4,26 @@ 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)
|
||||
if (groupList == null || groupList.Count == 0)
|
||||
{
|
||||
return "select 0 from DUAL";
|
||||
}
|
||||
}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
int i = 0;
|
||||
sb.AppendLine(string.Join(UtilConstants.ReplaceCommaKey.Replace("{", "").Replace("}", ""), groupList.Select(t =>
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user