Update gbase

This commit is contained in:
sunkaixuan 2024-06-13 16:58:58 +08:00
parent 260e537709
commit b31e3f88e4
14 changed files with 558 additions and 57 deletions

View File

@ -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;
}

View File

@ -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),

View File

@ -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;

View File

@ -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
}
}
}

View File

@ -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;
}
}
}

View File

@ -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);
}
}
}
}

View File

@ -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()
{

View File

@ -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;
}

View File

@ -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>

View File

@ -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>

View File

@ -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;
}
}
}
}

View File

@ -0,0 +1 @@
%~dp0nuget.exe pack %~dp0data.nuspec -OutputDirectory %~dp0

View 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>