mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 18:52:50 +08:00
update CustomDataType case
This commit is contained in:
parent
a3bfc49da3
commit
d1be9ec629
@ -6,6 +6,7 @@ using FreeSql.Internal;
|
||||
using FreeSql.Internal.CommonProvider;
|
||||
using FreeSql.Internal.Model;
|
||||
using FreeSql.Odbc.Default;
|
||||
using MessagePack;
|
||||
using Microsoft.Data.SqlClient;
|
||||
using NetTopologySuite.Geometries;
|
||||
using Newtonsoft.Json;
|
||||
@ -601,7 +602,18 @@ namespace base_entity
|
||||
BaseEntity.Initialization(fsql, () => _asyncUow.Value);
|
||||
#endregion
|
||||
|
||||
fsql.CodeFirst.GetTableByEntity(typeof(MFUser)).GetTableRef(nameof(MFUser.ExtInfo), true);
|
||||
fsql.Delete<MFUser>().Where(a => true).ExecuteAffrows();
|
||||
fsql.Delete<MFUserExt>().Where(a => true).ExecuteAffrows();
|
||||
fsql.Delete<MFToken>().Where(a => true).ExecuteAffrows();
|
||||
fsql.Insert(new MFUser { Id = "1", Name = "user1", Pd = "pd1" }).ExecuteAffrows();
|
||||
fsql.Insert(new MFUserExt { MFUserId = "1", Addr = "addr1", Phone = "phone1" }).ExecuteAffrows();
|
||||
fsql.Insert(new MFToken { MFUserId = "1", EndTime = DateTime.Now.AddDays(1), Source = "source1", Token = "token1" }).ExecuteAffrows();
|
||||
|
||||
var user = fsql.Select<MFUser>()
|
||||
.Include(a => a.ExtInfo)
|
||||
.InnerJoin<MFToken>((a, b) => a.Id == b.MFUserId)
|
||||
.First();
|
||||
|
||||
var sqlastable1 = fsql.Select<CurrentDetail>(101).AsTable((t, o) => "current_detail_230501").ToSql();
|
||||
var sqlastable2 = fsql.Update<CurrentDetail>(101).AsTable("current_detail_230501").Set(t => t.StatuId, 1).ToSql();
|
||||
@ -2397,4 +2409,41 @@ var sql11111 = fsql.Select<Class1111>()
|
||||
|
||||
public int StatuId { get; set; }
|
||||
}
|
||||
|
||||
[Table(DisableSyncStructure = true)]
|
||||
public abstract class BaseEntity22<TKey>
|
||||
{
|
||||
[Column(Position = 1, IsPrimary = true)]
|
||||
public TKey Id { get; set; }
|
||||
}
|
||||
|
||||
[Index("uk_name", "Name", true)]
|
||||
public class MFUser : BaseEntity22<string>
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public string Pd { get; set; }
|
||||
|
||||
[Navigate(nameof(Id))]
|
||||
public MFUserExt ExtInfo { get; set; }
|
||||
}
|
||||
[Index("uk_id", "MFUserId", true)]
|
||||
public class MFUserExt
|
||||
{
|
||||
[Column(IsPrimary = true)]
|
||||
public string MFUserId { get; set; }
|
||||
[Navigate(nameof(MFUserId))]
|
||||
public MFUser User { get; set; }
|
||||
|
||||
public string Phone { get; set; }
|
||||
public string Addr { get; set; }
|
||||
}
|
||||
[Index("index_name", "MFUserId")]
|
||||
[Index("index_token", "Token")]
|
||||
public class MFToken : BaseEntity22<string>
|
||||
{
|
||||
public string MFUserId { get; set; }
|
||||
public string Token { get; set; }
|
||||
public string? Source { get; set; }
|
||||
public DateTime EndTime { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -325,8 +325,10 @@ namespace FreeSql
|
||||
{
|
||||
case DataType.SqlServer:
|
||||
case DataType.OdbcSqlServer:
|
||||
case DataType.CustomSqlServer:
|
||||
case DataType.PostgreSQL:
|
||||
case DataType.OdbcPostgreSQL:
|
||||
case DataType.CustomPostgreSQL:
|
||||
case DataType.KingbaseES:
|
||||
case DataType.OdbcKingbaseES:
|
||||
case DataType.ShenTong:
|
||||
|
@ -41,8 +41,10 @@ namespace FreeSql
|
||||
{
|
||||
case DataType.SqlServer:
|
||||
case DataType.OdbcSqlServer:
|
||||
case DataType.CustomSqlServer:
|
||||
case DataType.PostgreSQL:
|
||||
case DataType.OdbcPostgreSQL:
|
||||
case DataType.CustomPostgreSQL:
|
||||
case DataType.KingbaseES:
|
||||
case DataType.OdbcKingbaseES:
|
||||
case DataType.ShenTong:
|
||||
@ -107,8 +109,10 @@ namespace FreeSql
|
||||
{
|
||||
case DataType.SqlServer:
|
||||
case DataType.OdbcSqlServer:
|
||||
case DataType.CustomSqlServer:
|
||||
case DataType.PostgreSQL:
|
||||
case DataType.OdbcPostgreSQL:
|
||||
case DataType.CustomPostgreSQL:
|
||||
case DataType.KingbaseES:
|
||||
case DataType.OdbcKingbaseES:
|
||||
case DataType.ShenTong:
|
||||
|
@ -39,8 +39,10 @@ namespace FreeSql
|
||||
{
|
||||
case DataType.SqlServer:
|
||||
case DataType.OdbcSqlServer:
|
||||
case DataType.CustomSqlServer:
|
||||
case DataType.PostgreSQL:
|
||||
case DataType.OdbcPostgreSQL:
|
||||
case DataType.CustomPostgreSQL:
|
||||
case DataType.KingbaseES:
|
||||
case DataType.OdbcKingbaseES:
|
||||
case DataType.ShenTong:
|
||||
@ -109,8 +111,10 @@ namespace FreeSql
|
||||
{
|
||||
case DataType.SqlServer:
|
||||
case DataType.OdbcSqlServer:
|
||||
case DataType.CustomSqlServer:
|
||||
case DataType.PostgreSQL:
|
||||
case DataType.OdbcPostgreSQL:
|
||||
case DataType.CustomPostgreSQL:
|
||||
case DataType.KingbaseES:
|
||||
case DataType.OdbcKingbaseES:
|
||||
case DataType.ShenTong:
|
||||
|
@ -671,6 +671,7 @@ public static partial class FreeSqlGlobalExtensions
|
||||
return select;
|
||||
case DataType.MySql: //MySql5.6
|
||||
case DataType.OdbcMySql:
|
||||
case DataType.CustomMySql:
|
||||
var mysqlConnectionString = select._orm.Ado?.ConnectionString ?? select._connection?.ConnectionString ?? "";
|
||||
if (_dicMySqlVersion.TryGetValue(mysqlConnectionString, out var mysqlVersion) == false)
|
||||
{
|
||||
@ -738,11 +739,13 @@ JOIN {select._commonUtils.QuoteSqlName(tbDbName)} a ON cte_tbc.cte_id = a.{selec
|
||||
{
|
||||
case DataType.PostgreSQL:
|
||||
case DataType.OdbcPostgreSQL:
|
||||
case DataType.CustomPostgreSQL:
|
||||
case DataType.KingbaseES:
|
||||
case DataType.OdbcKingbaseES:
|
||||
case DataType.ShenTong: //神通测试未通过
|
||||
case DataType.SqlServer:
|
||||
case DataType.OdbcSqlServer:
|
||||
case DataType.CustomSqlServer:
|
||||
case DataType.Firebird:
|
||||
case DataType.ClickHouse:
|
||||
sql1ctePath = select._commonExpression.ExpressionWhereLambda(select._tables, select._tableRule, Expression.Call(typeof(Convert).GetMethod("ToString", new Type[] { typeof(string) }), pathSelector?.Body), select._diymemexpWithTempQuery, null, null);
|
||||
@ -815,11 +818,13 @@ JOIN {select._commonUtils.QuoteSqlName(tbDbName)} a ON cte_tbc.cte_id = a.{selec
|
||||
{
|
||||
case DataType.PostgreSQL:
|
||||
case DataType.OdbcPostgreSQL:
|
||||
case DataType.CustomPostgreSQL:
|
||||
case DataType.KingbaseES:
|
||||
case DataType.OdbcKingbaseES:
|
||||
case DataType.ShenTong: //神通测试未通过
|
||||
case DataType.MySql:
|
||||
case DataType.OdbcMySql:
|
||||
case DataType.CustomMySql:
|
||||
case DataType.Firebird:
|
||||
nsselsb.Append("RECURSIVE ");
|
||||
break;
|
||||
@ -829,6 +834,7 @@ JOIN {select._commonUtils.QuoteSqlName(tbDbName)} a ON cte_tbc.cte_id = a.{selec
|
||||
{
|
||||
case DataType.Oracle: //[Err] ORA-32039: recursive WITH clause must have column alias list
|
||||
case DataType.OdbcOracle:
|
||||
case DataType.CustomOracle:
|
||||
case DataType.Dameng: //递归 WITH 子句必须具有列别名列表
|
||||
case DataType.OdbcDameng:
|
||||
case DataType.GBase:
|
||||
@ -861,20 +867,24 @@ SELECT ");
|
||||
{
|
||||
case DataType.MySql:
|
||||
case DataType.OdbcMySql:
|
||||
case DataType.CustomMySql:
|
||||
case DataType.ClickHouse:
|
||||
return that.OrderBy("rand()");
|
||||
case DataType.SqlServer:
|
||||
case DataType.OdbcSqlServer:
|
||||
case DataType.CustomSqlServer:
|
||||
return that.OrderBy("newid()");
|
||||
case DataType.PostgreSQL:
|
||||
case DataType.OdbcPostgreSQL:
|
||||
case DataType.CustomPostgreSQL:
|
||||
case DataType.KingbaseES:
|
||||
case DataType.OdbcKingbaseES:
|
||||
case DataType.ShenTong:
|
||||
return that.OrderBy("random()");
|
||||
case DataType.Oracle:
|
||||
case DataType.Dameng:
|
||||
case DataType.OdbcOracle:
|
||||
case DataType.CustomOracle:
|
||||
case DataType.Dameng:
|
||||
case DataType.OdbcDameng:
|
||||
return that.OrderBy("dbms_random.value");
|
||||
case DataType.Sqlite:
|
||||
@ -1322,6 +1332,7 @@ SELECT ");
|
||||
{
|
||||
case DataType.Oracle:
|
||||
case DataType.OdbcOracle:
|
||||
case DataType.CustomOracle:
|
||||
case DataType.GBase:
|
||||
sql = $" SELECT {af.field} FROM dual";
|
||||
break;
|
||||
|
@ -56,6 +56,7 @@ namespace FreeSql.Internal
|
||||
{
|
||||
case DataType.SqlServer:
|
||||
case DataType.OdbcSqlServer:
|
||||
case DataType.CustomSqlServer:
|
||||
return dbField.EndsWith(dbNestedField, StringComparison.CurrentCultureIgnoreCase);
|
||||
}
|
||||
return dbField.EndsWith(dbNestedField);
|
||||
@ -1081,6 +1082,7 @@ namespace FreeSql.Internal
|
||||
{
|
||||
case DataType.MySql:
|
||||
case DataType.OdbcMySql:
|
||||
case DataType.CustomMySql:
|
||||
exp3CsValue = exp3CsValue.Replace("\\\\", "\\");
|
||||
break;
|
||||
}
|
||||
@ -1286,6 +1288,7 @@ namespace FreeSql.Internal
|
||||
{
|
||||
case DataType.Oracle:
|
||||
case DataType.OdbcOracle:
|
||||
case DataType.CustomOracle:
|
||||
case DataType.Dameng:
|
||||
case DataType.OdbcDameng:
|
||||
case DataType.GBase:
|
||||
@ -1675,6 +1678,7 @@ namespace FreeSql.Internal
|
||||
{
|
||||
case DataType.MySql:
|
||||
case DataType.OdbcMySql:
|
||||
case DataType.CustomMySql:
|
||||
case DataType.GBase:
|
||||
if (exp3.Method.Name == "ToList")
|
||||
return $"( SELECT * FROM ({sqlFirst.Replace(" \r\n", " \r\n ")}) ftblmt50 )";
|
||||
@ -2654,6 +2658,7 @@ namespace FreeSql.Internal
|
||||
{
|
||||
case DataType.Oracle:
|
||||
case DataType.OdbcOracle:
|
||||
case DataType.CustomOracle:
|
||||
case DataType.Dameng:
|
||||
case DataType.OdbcDameng:
|
||||
case DataType.GBase:
|
||||
@ -2775,6 +2780,7 @@ namespace FreeSql.Internal
|
||||
{
|
||||
case DataType.Oracle:
|
||||
case DataType.OdbcOracle:
|
||||
case DataType.CustomOracle:
|
||||
case DataType.Dameng:
|
||||
case DataType.OdbcDameng:
|
||||
case DataType.GBase:
|
||||
|
@ -110,6 +110,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
{
|
||||
case DataType.Oracle:
|
||||
case DataType.OdbcOracle:
|
||||
case DataType.CustomOracle:
|
||||
case DataType.GBase:
|
||||
ExecuteNonQuery(null, null, CommandType.Text, " SELECT 1 FROM dual", commandTimeout);
|
||||
return true;
|
||||
|
@ -25,6 +25,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
{
|
||||
case DataType.Oracle:
|
||||
case DataType.OdbcOracle:
|
||||
case DataType.CustomOracle:
|
||||
case DataType.GBase:
|
||||
await ExecuteNonQueryAsync(null, null, CommandType.Text, " SELECT 1 FROM dual", commandTimeout, null, cancellationToken);
|
||||
return true;
|
||||
|
@ -286,6 +286,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
{
|
||||
case DataType.OdbcOracle:
|
||||
case DataType.Oracle:
|
||||
case DataType.CustomOracle:
|
||||
case DataType.OdbcDameng:
|
||||
case DataType.Dameng:
|
||||
case DataType.GBase:
|
||||
|
@ -723,6 +723,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
{
|
||||
case DataType.SqlServer:
|
||||
case DataType.OdbcSqlServer:
|
||||
case DataType.CustomSqlServer:
|
||||
if (val?.Equals(DateTime.MinValue) == true) val = new DateTime(1970, 1, 1);
|
||||
break;
|
||||
}
|
||||
|
@ -736,6 +736,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
case DataType.OdbcDameng: //达梦不能这样
|
||||
case DataType.Oracle:
|
||||
case DataType.OdbcOracle:
|
||||
case DataType.CustomOracle:
|
||||
case DataType.Firebird:
|
||||
case DataType.GBase:
|
||||
break;
|
||||
@ -792,6 +793,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
case DataType.OdbcDameng: //达梦不能这样
|
||||
case DataType.Oracle:
|
||||
case DataType.OdbcOracle:
|
||||
case DataType.CustomOracle:
|
||||
case DataType.Firebird:
|
||||
case DataType.GBase:
|
||||
break;
|
||||
@ -826,6 +828,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
case DataType.OdbcDameng: //达梦不能这样
|
||||
case DataType.Oracle:
|
||||
case DataType.OdbcOracle:
|
||||
case DataType.CustomOracle:
|
||||
case DataType.Firebird:
|
||||
case DataType.GBase:
|
||||
break;
|
||||
@ -1208,20 +1211,24 @@ namespace FreeSql.Internal.CommonProvider
|
||||
{
|
||||
case DataType.MySql:
|
||||
case DataType.OdbcMySql:
|
||||
case DataType.CustomMySql:
|
||||
_tosqlAppendContent = $"{_tosqlAppendContent} for update";
|
||||
break;
|
||||
case DataType.SqlServer:
|
||||
case DataType.OdbcSqlServer:
|
||||
case DataType.CustomSqlServer:
|
||||
_aliasRule = (_, old) => $"{old} With(UpdLock, RowLock{(noawait ? ", NoWait" : "")})";
|
||||
break;
|
||||
case DataType.PostgreSQL:
|
||||
case DataType.OdbcPostgreSQL:
|
||||
case DataType.CustomPostgreSQL:
|
||||
case DataType.KingbaseES:
|
||||
case DataType.OdbcKingbaseES:
|
||||
_tosqlAppendContent = $"{_tosqlAppendContent} for update{(noawait ? " nowait" : "")}";
|
||||
break;
|
||||
case DataType.Oracle:
|
||||
case DataType.OdbcOracle:
|
||||
case DataType.CustomOracle:
|
||||
case DataType.Dameng:
|
||||
case DataType.OdbcDameng:
|
||||
_tosqlAppendContent = $"{_tosqlAppendContent} for update{(noawait ? " nowait" : "")}";
|
||||
|
@ -202,6 +202,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
{
|
||||
case DataType.Oracle:
|
||||
case DataType.OdbcOracle:
|
||||
case DataType.CustomOracle:
|
||||
case DataType.Dameng:
|
||||
case DataType.OdbcDameng: //Oracle、Dameng 分组时,嵌套分页
|
||||
case DataType.GBase:
|
||||
|
@ -248,6 +248,7 @@ namespace FreeSql.Internal
|
||||
{
|
||||
case DataType.MySql:
|
||||
case DataType.OdbcMySql: //处理毫秒
|
||||
case DataType.CustomMySql:
|
||||
var timeLength = 0;
|
||||
var mTimeLength = Regex.Match(colattr.DbType, @"(DATETIME|TIMESTAMP)\s*\((\d+)\)");
|
||||
if (mTimeLength.Success) timeLength = int.Parse(mTimeLength.Groups[2].Value);
|
||||
@ -276,17 +277,20 @@ namespace FreeSql.Internal
|
||||
{
|
||||
case DataType.MySql:
|
||||
case DataType.OdbcMySql:
|
||||
case DataType.CustomMySql:
|
||||
if (strlen == -2) colattr.DbType = $"LONGTEXT{strNotNull}";
|
||||
else if (strlen < 0) colattr.DbType = $"TEXT{strNotNull}";
|
||||
else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
|
||||
break;
|
||||
case DataType.SqlServer:
|
||||
case DataType.OdbcSqlServer:
|
||||
case DataType.CustomSqlServer:
|
||||
if (strlen < 0) colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1(MAX)");
|
||||
else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
|
||||
break;
|
||||
case DataType.PostgreSQL:
|
||||
case DataType.OdbcPostgreSQL:
|
||||
case DataType.CustomPostgreSQL:
|
||||
case DataType.KingbaseES:
|
||||
case DataType.OdbcKingbaseES:
|
||||
case DataType.ShenTong:
|
||||
@ -294,6 +298,7 @@ namespace FreeSql.Internal
|
||||
else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
|
||||
break;
|
||||
case DataType.Oracle:
|
||||
case DataType.CustomOracle:
|
||||
if (strlen < 0) colattr.DbType = $"NCLOB{strNotNull}"; //v1.3.2+ https://github.com/dotnetcore/FreeSql/issues/259
|
||||
else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
|
||||
break;
|
||||
@ -337,23 +342,27 @@ namespace FreeSql.Internal
|
||||
{
|
||||
case DataType.MySql:
|
||||
case DataType.OdbcMySql:
|
||||
case DataType.CustomMySql:
|
||||
if (strlen == -2) colattr.DbType = $"LONGBLOB{strNotNull}";
|
||||
else if (strlen < 0) colattr.DbType = $"BLOB{strNotNull}";
|
||||
else colattr.DbType = Regex.Replace(colattr.DbType, bytePatten, $"$1({strlen})");
|
||||
break;
|
||||
case DataType.SqlServer:
|
||||
case DataType.OdbcSqlServer:
|
||||
case DataType.CustomSqlServer:
|
||||
if (strlen < 0) colattr.DbType = Regex.Replace(colattr.DbType, bytePatten, $"$1(MAX)");
|
||||
else colattr.DbType = Regex.Replace(colattr.DbType, bytePatten, $"$1({strlen})");
|
||||
break;
|
||||
case DataType.PostgreSQL:
|
||||
case DataType.OdbcPostgreSQL:
|
||||
case DataType.CustomPostgreSQL:
|
||||
case DataType.KingbaseES:
|
||||
case DataType.OdbcKingbaseES:
|
||||
case DataType.ShenTong: //驱动引发的异常:“System.Data.OscarClient.OscarException”(位于 System.Data.OscarClient.dll 中)
|
||||
colattr.DbType = $"BYTEA{strNotNull}"; //变长二进制串
|
||||
break;
|
||||
case DataType.Oracle:
|
||||
case DataType.CustomOracle:
|
||||
colattr.DbType = $"BLOB{strNotNull}";
|
||||
break;
|
||||
case DataType.Dameng:
|
||||
@ -1667,6 +1676,7 @@ namespace FreeSql.Internal
|
||||
if (dr.IsDBNull(index)) return null;
|
||||
break;
|
||||
case DataType.MySql:
|
||||
case DataType.CustomMySql:
|
||||
if (dr.GetFieldType(index).FullName == "MySqlConnector.MySqlDateTime")
|
||||
{
|
||||
if (dr.IsDBNull(index)) return null;
|
||||
|
Loading…
x
Reference in New Issue
Block a user