Skip to content

Commit 43c09ee

Browse files
committed
支持postgre json jsonb
1 parent 32b3fc8 commit 43c09ee

25 files changed

+127
-256
lines changed

AntData/AntData.DbModels.linux/PostgreSQL/EntityRobotForPostgreSQL.generated.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ public partial class School : BaseEntity
145145
/// <summary>
146146
/// json测试
147147
/// </summary>
148-
[Column("attr", DataType=AntData.ORM.DataType.Undefined, Comment="json测试"), Nullable]
148+
[Column("attr", DataType=AntData.ORM.DataType.Json, Comment="json测试"), Nullable]
149149
public object Attr { get; set; } // json
150150

151151
#endregion
Binary file not shown.

AntData/AntData.ORM/Common/CustomerParam.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,7 @@ public class CustomerParam
1919
public string TableName { get; set; }
2020
public string ColumnName { get; set; }
2121
public ParameterDirection ParameterDirection { get; set; }
22+
23+
public IDbDataParameter DbDataParameter { get; set; }
2224
}
2325
}

AntData/AntData.ORM/Data/AntOrmServiceCollectionExtensions.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,9 @@ public DbContextFactory(IDataProvider dataProvider, DbContextOptions dbContextOp
9999
_dbContextOptions = dbContextOptions;
100100
}
101101

102+
#pragma warning disable 693
102103
public object Build<T>() where T : class
104+
#pragma warning restore 693
103105
{
104106
var type = typeof(T);
105107
if (!type.IsGenericType)

AntData/AntData.ORM/Data/CommandInfo.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,9 @@ static Dictionary<string, CustomerParam> SetParameters(DataConnection dataConnec
360360

361361
foreach (var parameter in parameters)
362362
{
363-
var p = new CustomerParam(); //p = dataConnection.Command.CreateParameter();
363+
var dbParameter = dataConnection.CreateParameter();
364+
var p = new CustomerParam();
365+
p.DbDataParameter = dbParameter;
364366
var dataType = parameter.DataType;
365367
var value = parameter.Value;
366368
p.TableName = parameter.TableName;
@@ -369,13 +371,12 @@ static Dictionary<string, CustomerParam> SetParameters(DataConnection dataConnec
369371
if (dataType == DataType.Undefined && value != null)
370372
dataType = dataConnection.MappingSchema.GetDataType(value.GetType()).DataType;
371373

372-
//if (parameter.Direction != null) p.Direction = parameter.Direction.Value;
373-
//if (parameter.Size != null) p.Size = parameter.Size. Value;
374+
if (parameter.Direction != null) dbParameter.Direction = parameter.Direction.Value;
375+
if (parameter.Size != null) dbParameter.Size = parameter.Size.Value;
374376

375-
dataConnection.DataProvider.SetParameter(p, parameter.Name, dataType, value);
377+
dataConnection.DataProvider.SetParameter(p.DbDataParameter, parameter.Name, dataType, value);
376378

377379
p.ParameterName = parameter.Name;
378-
p.DbType = DataTypeConvert.Convert(dataType);
379380
result.Add(parameter.Name.StartsWith(dataConnection.DataProvider.ParameterSymbol) ? parameter.Name : dataConnection.DataProvider.ParameterSymbol + parameter.Name, p);
380381
//dataConnection.Command.Parameters.Add(p);
381382
}

AntData/AntData.ORM/Data/DataConnection.Linq.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -184,9 +184,9 @@ void GetParameters(IQueryContext query, PreparedQuery pq)
184184
}
185185

186186
CustomerParam AddParameter(ICollection<IDbDataParameter> parms, string name, SqlParameter parm)
187-
{
188-
187+
{
189188
var p = new CustomerParam();
189+
p.DbDataParameter = CreateParameter();
190190
var dataType = parm.DataType;
191191

192192
if (dataType == DataType.Undefined)
@@ -197,12 +197,11 @@ CustomerParam AddParameter(ICollection<IDbDataParameter> parms, string name, Sql
197197
parm.SystemType).DataType;
198198
}
199199

200-
DataProvider.SetParameter(p, name, dataType, parm.Value);
201-
p.DbType = DataTypeConvert.Convert(dataType);
200+
DataProvider.SetParameter(p.DbDataParameter, name, dataType, parm.Value);
202201
p.TableName = parm.TableName;
203202
p.ColumnName = parm.CoumnName;
204203
return p;
205-
;}
204+
}
206205

207206
#endregion
208207

AntData/AntData.ORM/Data/DataConnection.cs

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public DataConnection(string dbMappingName)
4141
this.CustomerExecuteQuery = DalBridge.CustomerExecuteQuery;
4242
this.CustomerExecuteQueryTable = DalBridge.CustomerExecuteQueryTable;
4343
this.CustomerBeginTransaction = DalBridge.CustomerBeginTransaction;
44-
44+
this.CreateDbDataParameter = DalBridge.CreateDbDataParameter;
4545
#endregion
4646
}
4747

@@ -63,7 +63,8 @@ public DataConnection([JetBrains.Annotations.NotNull] IDataProvider dataProvider
6363
this.CustomerExecuteScalar = DalBridge.CustomerExecuteScalar;
6464
this.CustomerExecuteQuery = DalBridge.CustomerExecuteQuery;
6565
this.CustomerExecuteQueryTable = DalBridge.CustomerExecuteQueryTable;
66-
this.CustomerBeginTransaction = DalBridge.CustomerBeginTransaction;
66+
this.CustomerBeginTransaction = DalBridge.CustomerBeginTransaction;
67+
this.CreateDbDataParameter = DalBridge.CreateDbDataParameter;
6768
#endregion
6869
}
6970

@@ -78,7 +79,7 @@ public DataConnection([JetBrains.Annotations.NotNull] IDataProvider dataProvider
7879
/// <param name="CustomerExecuteQuery">执行select 序列化成对象 </param>
7980
/// <param name="CustomerExecuteQueryTable">执行select 不走序列化 生成DataTable</param>
8081
/// <param name="CustomerBeginTransaction">执行事物</param>
81-
public DataConnection([JetBrains.Annotations.NotNull] IDataProvider dataProvider, string dbMappingName, Func<string, string, Dictionary<string, CustomerParam>, IDictionary,bool, int> CustomerExecuteNonQuery, Func<string, string, Dictionary<string, CustomerParam>, IDictionary, bool, object> CustomerExecuteScalar, Func<string, string, Dictionary<string, CustomerParam>, IDictionary, bool, List<IDataReader>> CustomerExecuteQuery, Func<string, string, Dictionary<string, CustomerParam>, IDictionary, bool, DataTable> CustomerExecuteQueryTable, Func<string, IDictionary, DataConnectionTransaction> CustomerBeginTransaction)
82+
public DataConnection([JetBrains.Annotations.NotNull] IDataProvider dataProvider, string dbMappingName, Func<string, string, Dictionary<string, CustomerParam>, IDictionary,bool, int> CustomerExecuteNonQuery, Func<string, string, Dictionary<string, CustomerParam>, IDictionary, bool, object> CustomerExecuteScalar, Func<string, string, Dictionary<string, CustomerParam>, IDictionary, bool, List<IDataReader>> CustomerExecuteQuery, Func<string, string, Dictionary<string, CustomerParam>, IDictionary, bool, DataTable> CustomerExecuteQueryTable, Func<string, IDictionary, DataConnectionTransaction> CustomerBeginTransaction, Func<string, IDictionary, IDbDataParameter> CreateDbDataParameter)
8283
{
8384
if (dataProvider == null) throw new ArgumentNullException("dataProvider");
8485

@@ -92,6 +93,7 @@ public DataConnection([JetBrains.Annotations.NotNull] IDataProvider dataProvider
9293
this.CustomerExecuteQuery = CustomerExecuteQuery;
9394
this.CustomerExecuteQueryTable = CustomerExecuteQueryTable;
9495
this.CustomerBeginTransaction = CustomerBeginTransaction;
96+
this.CreateDbDataParameter = CreateDbDataParameter;
9597
}
9698
#endregion
9799

@@ -184,6 +186,7 @@ internal bool IsMarsEnabled
184186
/// 事物
185187
/// </summary>
186188
private Func<string, IDictionary, DataConnectionTransaction> CustomerBeginTransaction { get; set; }
189+
private Func<string, IDictionary, IDbDataParameter> CreateDbDataParameter { get; set; }
187190

188191

189192
#endregion
@@ -473,6 +476,21 @@ internal DataConnectionTransaction ExecuteTransaction(IsolationLevel isolationLe
473476
ConnectionWrapper = result.DataConnection;
474477
return result;
475478
}
479+
480+
/// <summary>
481+
/// 获取IDbDataParameter
482+
/// </summary>
483+
/// <returns></returns>
484+
internal IDbDataParameter CreateParameter()
485+
{
486+
var dic = new Dictionary<string, object>();
487+
488+
dic.Add(DALExtStatementConstant.PARAMETER_SYMBOL, DataProvider.ParameterSymbol);
489+
dic.Add(DALExtStatementConstant.TRANSACTION_CONNECTION, ConnectionWrapper);
490+
var result = CreateDbDataParameter(ConnectionString, dic);
491+
return result;
492+
493+
}
476494
#endregion
477495

478496

AntData/AntData.ORM/Data/DataParameter.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,8 @@ public DataParameter(string name, object value, DataType dataType)
189189
#endif
190190
public static DataParameter Create (string name, BitArray value) { return new DataParameter { DataType = DataType.BitArray, Name = name, Value = value, }; }
191191
public static DataParameter Create (string name, Dictionary<string,string> value) { return new DataParameter { DataType = DataType.Dictionary, Name = name, Value = value, }; }
192-
}
192+
public static DataParameter Json(string name, string value) { return new DataParameter { DataType = DataType.Json, Name = name, Value = value, }; }
193+
public static DataParameter BinaryJson(string name, string value) { return new DataParameter { DataType = DataType.BinaryJson, Name = name, Value = value, }; }
194+
}
193195
}
194196
#pragma warning restore CS3021 // Type or member does not need a CLSCompliant attribute because the assembly does not have a CLSCompliant attribute

AntData/AntData.ORM/DataProvider/DataProviderBase.cs

Lines changed: 0 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -277,58 +277,6 @@ public virtual void SetParameter(IDbDataParameter parameter, string name, DataTy
277277
parameter.Value = value ?? DBNull.Value;
278278
}
279279

280-
public virtual void SetParameter(CustomerParam parameter, string name, DataType dataType, object value)
281-
{
282-
switch (dataType)
283-
{
284-
case DataType.Char:
285-
case DataType.NChar:
286-
case DataType.VarChar:
287-
case DataType.NVarChar:
288-
case DataType.Text:
289-
case DataType.NText:
290-
if (value is DateTimeOffset) value = ((DateTimeOffset)value).ToString("yyyy-MM-ddTHH:mm:ss.ffffff zzz");
291-
else if (value is DateTime)
292-
{
293-
var dt = (DateTime)value;
294-
value = dt.ToString(
295-
dt.Millisecond == 0
296-
? dt.Hour == 0 && dt.Minute == 0 && dt.Second == 0
297-
? "yyyy-MM-dd"
298-
: "yyyy-MM-ddTHH:mm:ss"
299-
: "yyyy-MM-ddTHH:mm:ss.fff");
300-
}
301-
else if (value is TimeSpan)
302-
{
303-
var ts = (TimeSpan)value;
304-
value = ts.ToString(
305-
ts.Days > 0
306-
? ts.Milliseconds > 0
307-
? "d\\.hh\\:mm\\:ss\\.fff"
308-
: "d\\.hh\\:mm\\:ss"
309-
: ts.Milliseconds > 0
310-
? "hh\\:mm\\:ss\\.fff"
311-
: "hh\\:mm\\:ss");
312-
}
313-
break;
314-
case DataType.Image:
315-
case DataType.Binary:
316-
case DataType.Blob:
317-
case DataType.VarBinary:
318-
if (value is Binary) value = ((Binary)value).ToArray();
319-
break;
320-
case DataType.Int64:
321-
if (value is TimeSpan) value = ((TimeSpan)value).Ticks;
322-
break;
323-
case DataType.Xml:
324-
if (value is XDocument) value = value.ToString();
325-
else if (value is XmlDocument) value = ((XmlDocument)value).InnerXml;
326-
break;
327-
}
328-
329-
parameter.ParameterName = name;
330-
parameter.Value = value ?? DBNull.Value;
331-
}
332280
public virtual Type ConvertParameterType(Type type, DataType dataType)
333281
{
334282
switch (dataType)
@@ -360,7 +308,6 @@ public virtual Type ConvertParameterType(Type type, DataType dataType)
360308
}
361309

362310
public abstract bool IsCompatibleConnection(IDbConnection connection);
363-
//public abstract ISchemaProvider GetSchemaProvider ();
364311

365312
protected virtual void SetParameterType(IDbDataParameter parameter, DataType dataType)
366313
{

AntData/AntData.ORM/DataProvider/DynamicDataProviderBase.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ public abstract class DynamicDataProviderBase : DataProviderBase
1313
protected DynamicDataProviderBase(string name, MappingSchema mappingSchema)
1414
: base(name, mappingSchema)
1515
{
16+
GetConnectionType();
17+
1618
}
1719

1820
protected abstract string ConnectionTypeName { get; }

0 commit comments

Comments
 (0)