diff --git a/Src/Asp.NetCore2/SqlSugar.GBaseCore/DataTableExtensions/GBaseDataAdapter.cs b/Src/Asp.NetCore2/SqlSugar.GBaseCore/DataTableExtensions/GBaseDataAdapter.cs
index c2069ce9d..a40f70730 100644
--- a/Src/Asp.NetCore2/SqlSugar.GBaseCore/DataTableExtensions/GBaseDataAdapter.cs
+++ b/Src/Asp.NetCore2/SqlSugar.GBaseCore/DataTableExtensions/GBaseDataAdapter.cs
@@ -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
{
///
@@ -10,15 +11,15 @@ namespace SqlSugar.GBase
///
public class GBaseDataAdapter : IDataAdapter
{
- private OdbcCommand command;
+ private GbsCommand command;
private string sql;
- private OdbcConnection _sqlConnection;
+ private GbsConnection _sqlConnection;
///
/// SqlDataAdapter
///
///
- public GBaseDataAdapter(OdbcCommand command)
+ public GBaseDataAdapter(GbsCommand command)
{
this.command = command;
}
@@ -33,7 +34,7 @@ namespace SqlSugar.GBase
///
///
///
- 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
///
/// SelectCommand
///
- 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;
}
diff --git a/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/DbBind/GBaseDbBind.cs b/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/DbBind/GBaseDbBind.cs
index 0001c25b1..fdd893850 100644
--- a/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/DbBind/GBaseDbBind.cs
+++ b/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/DbBind/GBaseDbBind.cs
@@ -34,7 +34,6 @@ namespace SqlSugar.GBase
}
public static List> MappingTypesConst = new List>()
{
- new KeyValuePair("numeric",CSharpDataType.@long),
new KeyValuePair("bigint",CSharpDataType.@long),
new KeyValuePair("blob",CSharpDataType.byteArray),
new KeyValuePair("boolean",CSharpDataType.@bool),
@@ -42,7 +41,7 @@ namespace SqlSugar.GBase
new KeyValuePair("varchar", CSharpDataType.@string),
new KeyValuePair("char",CSharpDataType.@string),
new KeyValuePair("clob",CSharpDataType.@string),
- new KeyValuePair("DATETIME YEAR TO FRACTION(3)", CSharpDataType.DateTime),
+ new KeyValuePair("DATETIME YEAR TO FRACTION(5)", CSharpDataType.DateTime),
new KeyValuePair("datetime", CSharpDataType.DateTime),
new KeyValuePair("date", CSharpDataType.DateTime),
new KeyValuePair("decimal", CSharpDataType.@decimal),
diff --git a/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/GBaseProvider.cs b/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/GBaseProvider.cs
index ce71d17f5..35a9368f5 100644
--- a/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/GBaseProvider.cs
+++ b/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/GBaseProvider.cs
@@ -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();
}
///
/// 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();
+
+ 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;
}
///
/// if mysql return MySqlParameter[] pars
@@ -233,13 +297,13 @@ namespace SqlSugar.GBase
///
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
///
///
///
- 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;
diff --git a/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/SqlBuilder/GBaseBuilder.cs b/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/SqlBuilder/GBaseBuilder.cs
index 6e8edaeab..df2ec576b 100644
--- a/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/SqlBuilder/GBaseBuilder.cs
+++ b/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/SqlBuilder/GBaseBuilder.cs
@@ -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
}
}
-
}
diff --git a/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/SqlBuilder/GBaseExpressionContext.cs b/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/SqlBuilder/GBaseExpressionContext.cs
index cc4fb7d54..d4b058d5f 100644
--- a/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/SqlBuilder/GBaseExpressionContext.cs
+++ b/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/SqlBuilder/GBaseExpressionContext.cs
@@ -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;
+ }
}
}
diff --git a/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/SqlBuilder/GBaseInsertBuilder.cs b/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/SqlBuilder/GBaseInsertBuilder.cs
index 82d0c92eb..f3311cbbb 100644
--- a/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/SqlBuilder/GBaseInsertBuilder.cs
+++ b/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/SqlBuilder/GBaseInsertBuilder.cs
@@ -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 columns, int rowIndex)
+ {
+ var isDic = this.EntityInfo.DbTableName.StartsWith("Dictionary`");
+ foreach (var item in columns)
+ {
+ if (this.Parameters == null) this.Parameters = new List();
+ 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);
+ }
+ }
}
}
diff --git a/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/SqlBuilder/GBaseQueryBuilder.cs b/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/SqlBuilder/GBaseQueryBuilder.cs
index d8ea90c1b..b08ecc05a 100644
--- a/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/SqlBuilder/GBaseQueryBuilder.cs
+++ b/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/SqlBuilder/GBaseQueryBuilder.cs
@@ -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()
{
diff --git a/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/SqlBuilder/GBaseUpdateBuilder.cs b/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/SqlBuilder/GBaseUpdateBuilder.cs
index 88607e4ba..f85f18f13 100644
--- a/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/SqlBuilder/GBaseUpdateBuilder.cs
+++ b/Src/Asp.NetCore2/SqlSugar.GBaseCore/GBase/SqlBuilder/GBaseUpdateBuilder.cs
@@ -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> 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;
}
diff --git a/Src/Asp.NetCore2/SqlSugar.GBaseCore/GeneralData.EntityFrameworkCore.GBase.DataProvider.dll b/Src/Asp.NetCore2/SqlSugar.GBaseCore/GeneralData.EntityFrameworkCore.GBase.DataProvider.dll
new file mode 100644
index 000000000..406c68a2e
Binary files /dev/null and b/Src/Asp.NetCore2/SqlSugar.GBaseCore/GeneralData.EntityFrameworkCore.GBase.DataProvider.dll differ
diff --git a/Src/Asp.NetCore2/SqlSugar.GBaseCore/SqlSugar.GBaseCore.csproj b/Src/Asp.NetCore2/SqlSugar.GBaseCore/SqlSugar.GBaseCore.csproj
index afa11a591..46f5c2ad6 100644
--- a/Src/Asp.NetCore2/SqlSugar.GBaseCore/SqlSugar.GBaseCore.csproj
+++ b/Src/Asp.NetCore2/SqlSugar.GBaseCore/SqlSugar.GBaseCore.csproj
@@ -6,7 +6,7 @@
-
+
diff --git a/Src/Asp.NetCore2/SqlSugar.GBaseCore/SqlSugar.GBaseCore.nuspec b/Src/Asp.NetCore2/SqlSugar.GBaseCore/SqlSugar.GBaseCore.nuspec
index 438b023a3..5e5142983 100644
--- a/Src/Asp.NetCore2/SqlSugar.GBaseCore/SqlSugar.GBaseCore.nuspec
+++ b/Src/Asp.NetCore2/SqlSugar.GBaseCore/SqlSugar.GBaseCore.nuspec
@@ -14,7 +14,7 @@
Asp.net core orm
-
+
diff --git a/Src/Asp.NetCore2/SqlSugar.GBaseCore/Tools/UtilMethods.cs b/Src/Asp.NetCore2/SqlSugar.GBaseCore/Tools/UtilMethods.cs
index 3b43c4776..f2dd5782a 100644
--- a/Src/Asp.NetCore2/SqlSugar.GBaseCore/Tools/UtilMethods.cs
+++ b/Src/Asp.NetCore2/SqlSugar.GBaseCore/Tools/UtilMethods.cs
@@ -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;
+ }
+ }
}
}
diff --git a/Src/Asp.NetCore2/SqlSugar.GBaseCore/data.bat b/Src/Asp.NetCore2/SqlSugar.GBaseCore/data.bat
new file mode 100644
index 000000000..0c8b3340e
--- /dev/null
+++ b/Src/Asp.NetCore2/SqlSugar.GBaseCore/data.bat
@@ -0,0 +1 @@
+%~dp0nuget.exe pack %~dp0data.nuspec -OutputDirectory %~dp0
\ No newline at end of file
diff --git a/Src/Asp.NetCore2/SqlSugar.GBaseCore/data.nuspec b/Src/Asp.NetCore2/SqlSugar.GBaseCore/data.nuspec
new file mode 100644
index 000000000..5ea9d7e71
--- /dev/null
+++ b/Src/Asp.NetCore2/SqlSugar.GBaseCore/data.nuspec
@@ -0,0 +1,22 @@
+
+
+
+ GBase.DataProvider
+ 1.1
+ sunkaixuan
+ Landa
+ http://www.apache.org/licenses/LICENSE-2.0.html
+ https://github.com/sunkaixuan/SqlSugar
+ https://secure.gravatar.com/avatar/a82c03402497b2e58fd65038a3699b30
+ false
+ SqlSugar操作 GBase 南大通用数据库
+ Copyright 2016
+ Asp.net core orm
+
+
+
+
+
+
+
+
\ No newline at end of file