using System; using System.Linq; namespace SqlSugar.BzTDengineCore { public class TDengineBuilder : SqlBuilderProvider { public override string SqlTranslationLeft => "`"; public override string SqlTranslationRight => "`"; public override string SqlDateNow => "current_date"; public override string FullSqlDateNow => " now() "; public bool isAutoToLower { get { if (Context.CurrentConnectionConfig.MoreSettings == null) return true; else if ( Context.CurrentConnectionConfig.MoreSettings.PgSqlIsAutoToLower == false && Context.CurrentConnectionConfig.MoreSettings?.PgSqlIsAutoToLowerCodeFirst == false) { return false; } else { return true; } } } public override string GetTranslationColumnName(string propertyName) { if (propertyName.Contains(".") && !propertyName.Contains(SqlTranslationLeft)) { return string.Join(".", propertyName.Split('.').Select(it => $"{SqlTranslationLeft}{it.ToLower(isAutoToLower)}{SqlTranslationRight}")); } if (propertyName.Contains(SqlTranslationLeft)) return propertyName; else return SqlTranslationLeft + propertyName.ToLower(isAutoToLower) + SqlTranslationRight; } //public override string GetNoTranslationColumnName(string name) //{ // return name.TrimEnd(Convert.ToChar(SqlTranslationRight)).TrimStart(Convert.ToChar(SqlTranslationLeft)).ToLower(); //} public override string GetTranslationColumnName(string entityName, string propertyName) { Check.ArgumentNullException(entityName, string.Format(ErrorMessage.ObjNotExist, "Table Name")); Check.ArgumentNullException(propertyName, string.Format(ErrorMessage.ObjNotExist, "Column Name")); var context = Context; var mappingInfo = context .MappingColumns .FirstOrDefault(it => it.EntityName.Equals(entityName, StringComparison.CurrentCultureIgnoreCase) && it.PropertyName.Equals(propertyName, StringComparison.CurrentCultureIgnoreCase)); return mappingInfo == null ? SqlTranslationLeft + propertyName.ToLower(isAutoToLower) + SqlTranslationRight : SqlTranslationLeft + mappingInfo.DbColumnName.ToLower(isAutoToLower) + SqlTranslationRight; } public override string GetTranslationTableName(string name) { Check.ArgumentNullException(name, string.Format(ErrorMessage.ObjNotExist, "Table Name")); var context = Context; var mappingInfo = context .MappingTables .FirstOrDefault(it => it.EntityName.Equals(name, StringComparison.CurrentCultureIgnoreCase)); if (mappingInfo == null && name.Contains(".") && name.Contains("`")) { return name; } name = mappingInfo == null ? name : mappingInfo.DbTableName; if (name.Contains(".") && !name.Contains("(") && !name.Contains("\".\"")) { return string.Join(".", name.ToLower(isAutoToLower).Split('.').Select(it => SqlTranslationLeft + it + SqlTranslationRight)); } else if (name.Contains("(")) { return name; } else if (name.Contains(SqlTranslationLeft) && name.Contains(SqlTranslationRight)) { return name; } else { return SqlTranslationLeft + name.ToLower(isAutoToLower).TrimEnd('"').TrimStart('"') + SqlTranslationRight; } } public override string GetUnionFomatSql(string sql) { return " ( " + sql + " ) "; } public override Type GetNullType(string tableName, string columnName) { if (tableName != null) tableName = tableName.Trim(); var columnInfo = Context.DbMaintenance.GetColumnInfosByTableName(tableName).FirstOrDefault(z => z.DbColumnName?.ToLower() == columnName?.ToLower()); if (columnInfo != null) { var cTypeName = Context.Ado.DbBind.GetCsharpTypeNameByDbTypeName(columnInfo.DataType); var value = SqlSugar.UtilMethods.GetTypeByTypeName(cTypeName); if (value != null) { var key = "GetNullType_" + tableName + columnName; return new ReflectionInoCacheService().GetOrCreate(key, () => value); } } return null; } } }