mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-19 20:38:16 +08:00
- 增加 FreeSql.Provider.Firebird 数据库实现 #443;
This commit is contained in:
@ -106,6 +106,9 @@ namespace FreeSql.Internal.CommonProvider
|
||||
case DataType.OdbcOracle:
|
||||
ExecuteNonQuery(" SELECT 1 FROM dual");
|
||||
return true;
|
||||
case DataType.Firebird:
|
||||
ExecuteNonQuery(" SELECT FIRST 1 1 FROM rdb$database");
|
||||
return true;
|
||||
}
|
||||
ExecuteNonQuery(" SELECT 1");
|
||||
return true;
|
||||
|
@ -24,6 +24,9 @@ namespace FreeSql.Internal.CommonProvider
|
||||
case DataType.OdbcOracle:
|
||||
await ExecuteNonQueryAsync(" SELECT 1 FROM dual");
|
||||
return true;
|
||||
case DataType.Firebird:
|
||||
await ExecuteNonQueryAsync(" SELECT FIRST 1 1 FROM rdb$database");
|
||||
return true;
|
||||
}
|
||||
await ExecuteNonQueryAsync(" SELECT 1");
|
||||
return true;
|
||||
|
@ -145,6 +145,12 @@ namespace FreeSql.Internal.CommonProvider
|
||||
{
|
||||
if (didx > 0) sb.Append(" \r\nUNION ALL\r\n ");
|
||||
sb.Append("SELECT ");
|
||||
switch (_orm.Ado.DataType)
|
||||
{
|
||||
case DataType.Firebird:
|
||||
sb.Append("FIRST 1 ");
|
||||
break;
|
||||
}
|
||||
var colidx2 = 0;
|
||||
foreach (var col in _table.Columns.Values)
|
||||
{
|
||||
@ -167,6 +173,9 @@ namespace FreeSql.Internal.CommonProvider
|
||||
case DataType.Dameng:
|
||||
sb.Append(" FROM dual");
|
||||
break;
|
||||
case DataType.Firebird:
|
||||
sb.Append(" FROM rdb$database");
|
||||
break;
|
||||
}
|
||||
++didx;
|
||||
}
|
||||
|
@ -522,10 +522,11 @@ namespace FreeSql.Internal.CommonProvider
|
||||
return this;
|
||||
}
|
||||
|
||||
public virtual string ToSql() => ToSqlValuesOrSelectUnionAll(true);
|
||||
public virtual string ToSql() => ToSqlValuesOrSelectUnionAllExtension102(true, null, null);
|
||||
|
||||
public string ToSqlValuesOrSelectUnionAll(bool isValues = true) => ToSqlValuesOrSelectUnionAllExtension101(isValues, null);
|
||||
public string ToSqlValuesOrSelectUnionAllExtension101(bool isValues, Action<object, int, StringBuilder> onrow)
|
||||
public string ToSqlValuesOrSelectUnionAll(bool isValues = true) => ToSqlValuesOrSelectUnionAllExtension102(isValues, null, null);
|
||||
public string ToSqlValuesOrSelectUnionAllExtension101(bool isValues, Action<object, int, StringBuilder> onrow) => ToSqlValuesOrSelectUnionAllExtension102(isValues, null, onrow);
|
||||
public string ToSqlValuesOrSelectUnionAllExtension102(bool isValues, Action<object, int, StringBuilder> onrowPre, Action<object, int, StringBuilder> onrow)
|
||||
{
|
||||
if (_source == null || _source.Any() == false) return null;
|
||||
var sb = new StringBuilder();
|
||||
@ -549,6 +550,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
{
|
||||
if (didx > 0) sb.Append(isValues ? ", " : " \r\nUNION ALL\r\n ");
|
||||
sb.Append(isValues ? "(" : "SELECT ");
|
||||
onrowPre?.Invoke(d, didx, sb);
|
||||
var colidx2 = 0;
|
||||
foreach (var col in _table.Columns.Values)
|
||||
{
|
||||
|
@ -287,6 +287,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
case DataType.OdbcDameng: //达梦不能这样
|
||||
case DataType.Oracle:
|
||||
case DataType.OdbcOracle:
|
||||
case DataType.Firebird:
|
||||
break;
|
||||
default:
|
||||
_select = "SELECT ";
|
||||
@ -334,6 +335,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
case DataType.OdbcDameng: //达梦不能这样
|
||||
case DataType.Oracle:
|
||||
case DataType.OdbcOracle:
|
||||
case DataType.Firebird:
|
||||
break;
|
||||
default:
|
||||
var beforeSql = this._select;
|
||||
@ -359,6 +361,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
case DataType.OdbcDameng: //达梦不能这样
|
||||
case DataType.Oracle:
|
||||
case DataType.OdbcOracle:
|
||||
case DataType.Firebird:
|
||||
break;
|
||||
default:
|
||||
var beforeSql = this._select;
|
||||
@ -648,6 +651,9 @@ namespace FreeSql.Internal.CommonProvider
|
||||
case DataType.ShenTong: //神通测试中发现,不支持 nowait
|
||||
_tosqlAppendContent = " for update";
|
||||
break;
|
||||
case DataType.Firebird:
|
||||
_tosqlAppendContent = " for update with lock";
|
||||
break;
|
||||
}
|
||||
return this as TSelect;
|
||||
}
|
||||
|
@ -275,6 +275,11 @@ namespace FreeSql.Internal
|
||||
if (strlen < 0) colattr.DbType = "LONGTEXT";
|
||||
else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
|
||||
break;
|
||||
case DataType.Firebird:
|
||||
charPatten = @"(CHAR|CHAR2|CHARACTER|TEXT)\s*(\([^\)]*\))?";
|
||||
if (strlen < 0) colattr.DbType = "BLOB SUB_TYPE 1";
|
||||
else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (colattr.MapType == typeof(byte[]) && colattr.StringLength != 0)
|
||||
@ -318,6 +323,9 @@ namespace FreeSql.Internal
|
||||
if (strlen < 0) colattr.DbType = "BLOB";
|
||||
else colattr.DbType = Regex.Replace(colattr.DbType, bytePatten, $"$1({strlen})");
|
||||
break;
|
||||
case DataType.Firebird:
|
||||
colattr.DbType = "BLOB";
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (colattr.MapType == typeof(decimal) && colattr.Precision > 0)
|
||||
|
Reference in New Issue
Block a user