gbase_contributors fdcb76eaa2 suppourt ndty orm
2021-12-15 14:48:26 +08:00

128 lines
5.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using FreeSql.GBase.Curd;
using FreeSql.Internal.CommonProvider;
using System;
using System.Data.Common;
using System.IO;
using System.Text;
using System.Threading;
namespace FreeSql.GBase
{
public class GBaseProvider<TMark> : BaseDbProvider, IFreeSql<TMark>
{
public override ISelect<T1> CreateSelectProvider<T1>(object dywhere) => new GBaseSelect<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
public override IInsert<T1> CreateInsertProvider<T1>() => new GBaseInsert<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression);
public override IUpdate<T1> CreateUpdateProvider<T1>(object dywhere) => new GBaseUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
public override IDelete<T1> CreateDeleteProvider<T1>(object dywhere) => new GBaseDelete<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression, dywhere);
public override IInsertOrUpdate<T1> CreateInsertOrUpdateProvider<T1>() => new GBaseInsertOrUpdate<T1>(this, this.InternalCommonUtils, this.InternalCommonExpression);
public GBaseProvider(string masterConnectionString, string[] slaveConnectionString, Func<DbConnection> connectionFactory = null)
{
this.InternalCommonUtils = new GBaseUtils(this);
this.InternalCommonExpression = new GBaseExpression(this.InternalCommonUtils);
this.Ado = new GBaseAdo(this.InternalCommonUtils, masterConnectionString, slaveConnectionString, connectionFactory);
this.Aop = new AopProvider();
this.DbFirst = new GBaseDbFirst(this, this.InternalCommonUtils, this.InternalCommonExpression);
this.CodeFirst = new GBaseCodeFirst(this, this.InternalCommonUtils, this.InternalCommonExpression);
this.Aop.AuditDataReader += (_, e) =>
{
var dbtype = e.DataReader.GetDataTypeName(e.Index);
switch (dbtype)
{
case "CHAR":
case "VARCHAR":
case "BOOLEAN":
case "SMALLINT":
case "INTEGER":
case "DECIMAL":
case "FLOAT":
case "SMALLFLOAT":
return;
case "BIGINT":
//Unkonw SQL type -- 114.
try
{
e.Value = e.DataReader.GetInt64(e.Index);
return;
}
catch
{
e.Value = e.DataReader.GetValue(e.Index);
if (e.Value == DBNull.Value) e.Value = null;
return;
}
case "BLOB":
//Unkonw SQL type -- 102.
Stream stm = null;
try
{
stm = e.DataReader.GetStream(e.Index);
}
catch
{
e.Value = e.DataReader.GetValue(e.Index);
if (e.Value == DBNull.Value) e.Value = null;
return;
}
using (var ms = new MemoryStream())
{
var stmbuf = new byte[1];
while (true)
{
if (stm.Read(stmbuf, 0, 1) <= 0) break;
ms.Write(stmbuf, 0, 1);
}
e.Value = ms.ToArray();
ms.Close();
}
return;
}
if (dbtype.StartsWith("INTERVAL DAY"))
{
//INTERVAL DAY(3) TO FRACTION(3)
//异常Unknown SQL type - 110.
var tsv = "";
try
{
tsv = e.DataReader.GetString(e.Index)?.Trim().Replace(' ', ':');
}
catch
{
e.Value = e.DataReader.GetValue(e.Index);
if (e.Value == DBNull.Value) e.Value = null;
return;
}
e.Value = TimeSpan.Parse(tsv);
return;
}
};
}
~GBaseProvider() => this.Dispose();
int _disposeCounter;
public override void Dispose()
{
if (Interlocked.Increment(ref _disposeCounter) != 1) return;
(this.Ado as AdoProvider)?.Dispose();
}
}
}
//--== GBase 8s Information for this install ==--
//$GBASEDBTSERVER : gbase01
//$GBASEDBTDIR : /opt/gbase
//USER HOME : /home/gbase
//DBSPACE DIR : /data/gbase
//IP ADDRESS : 192.168.164.134 127.0.0.1
//PORT NUMBER : 9088
//$DB_LOCALE : zh_CN.utf8
//$CLIENT_LOCALE : zh_CN.utf8
//JDBC URL : jdbc:gbasedbt-sqli://IPADDR:9088/testdb:GBASEDBTSERVER=gbase01;DB_LOCALE=zh_CN.utf8;CLIENT_LOCALE=zh_CN.utf8;IFX_LOCK_MODE_WAIT=10
//JDBC USERNAME : gbasedbt
//JDBC PASSWORD : GBase123