private string GetTableNameWithQuotes(JoinAttributeBase attrJoin, SqlPropertyMetadata[] props, string tableName) { switch (Provider) { case SqlProvider.MSSQL: tableName = "[" + tableName + "]"; attrJoin.TableName = GetTableNameWithSchemaPrefix(attrJoin.TableName, attrJoin.TableSchema, "[", "]"); attrJoin.Key = "[" + attrJoin.Key + "]"; attrJoin.ExternalKey = "[" + attrJoin.ExternalKey + "]"; attrJoin.TableAlias = string.IsNullOrEmpty(attrJoin.TableAlias) ? string.Empty : "[" + attrJoin.TableAlias + "]"; foreach (var prop in props) { prop.ColumnName = "[" + prop.CleanColumnName + "]"; } break; case SqlProvider.MySQL: tableName = "`" + tableName + "`"; attrJoin.TableName = GetTableNameWithSchemaPrefix(attrJoin.TableName, attrJoin.TableSchema, "`", "`"); attrJoin.Key = "`" + attrJoin.Key + "`"; attrJoin.ExternalKey = "`" + attrJoin.ExternalKey + "`"; attrJoin.TableAlias = string.IsNullOrEmpty(attrJoin.TableAlias) ? string.Empty : "`" + attrJoin.TableAlias + "`"; foreach (var prop in props) { prop.ColumnName = "`" + prop.CleanColumnName + "`"; } break; case SqlProvider.SQLite: break; case SqlProvider.PostgreSQL: tableName = "\"" + tableName + "\""; attrJoin.TableName = GetTableNameWithSchemaPrefix(attrJoin.TableName, attrJoin.TableSchema, "\"", "\""); attrJoin.Key = "\"" + attrJoin.Key + "\""; attrJoin.ExternalKey = "\"" + attrJoin.ExternalKey + "\""; attrJoin.TableAlias = string.IsNullOrEmpty(attrJoin.TableAlias) ? string.Empty : "\"" + attrJoin.TableAlias + "\""; foreach (var prop in props) { prop.ColumnName = "\"" + prop.CleanColumnName + "\""; } break; default: throw new ArgumentOutOfRangeException(nameof(Provider)); } return(tableName); }
private void AppendJoinQuery(JoinAttributeBase attrJoin, StringBuilder joinBuilder, string tableName) { var joinString = attrJoin.ToString(); var joinAs = Provider == SqlProvider.Oracle ? " " : " AS "; if (attrJoin is CrossJoinAttribute) { joinBuilder.Append(attrJoin.TableAlias == string.Empty ? $"{joinString} {attrJoin.TableName} " : $"{joinString} {attrJoin.TableName}{joinAs}{attrJoin.TableAlias} "); } else if (attrJoin.TableName != null) { var customFilter = string.Empty; if (JoinsLogicalDelete != null && JoinsLogicalDelete.TryGetValue(attrJoin.TableName, out var deleteAttr)) { var colAttr = deleteAttr.GetCustomAttribute <ColumnAttribute>(); var colName = colAttr == null ? deleteAttr.Name : colAttr.Name; object deleteValue = 1; if (deleteAttr.PropertyType.IsEnum) { var deleteOption = deleteAttr.PropertyType.GetFields().FirstOrDefault(f => f.GetCustomAttribute <DeletedAttribute>() != null); if (deleteOption != null) { var enumValue = Enum.Parse(deleteAttr.PropertyType, deleteOption.Name); deleteValue = Convert.ChangeType(enumValue, Enum.GetUnderlyingType(deleteAttr.PropertyType)); } } customFilter = attrJoin.TableAlias == string.Empty ? $"AND {attrJoin.TableName}.{colName} != {deleteValue} " : $"AND {attrJoin.TableAlias}.{colName} != {deleteValue} "; } joinBuilder.Append(attrJoin.TableAlias == string.Empty ? $"{joinString} {attrJoin.TableName} ON {tableName}.{attrJoin.Key} = {attrJoin.TableName}.{attrJoin.ExternalKey} {customFilter}" : $"{joinString} {attrJoin.TableName}{joinAs}{attrJoin.TableAlias} ON {tableName}.{attrJoin.Key} = {attrJoin.TableAlias}.{attrJoin.ExternalKey} {customFilter}"); } }