diff --git a/src/Core/Resolvers/DWSqlQueryBuilder.cs b/src/Core/Resolvers/DWSqlQueryBuilder.cs
index 7710b3fdce..5215deae18 100644
--- a/src/Core/Resolvers/DWSqlQueryBuilder.cs
+++ b/src/Core/Resolvers/DWSqlQueryBuilder.cs
@@ -432,5 +432,11 @@ private string BuildAggregationColumns(GroupByMetadata metadata)
{
return string.Join(", ", metadata.Aggregations.Select(aggregation => Build(aggregation.Column, useAlias: true)));
}
+
+ public string QuoteTableNameAsDBConnectionParam(string param)
+ {
+ // Table names in DWSql should not be quoted when used as DB Connection Params.
+ return param;
+ }
}
}
diff --git a/src/Core/Resolvers/IQueryBuilder.cs b/src/Core/Resolvers/IQueryBuilder.cs
index f86dd26d2e..3a14e472cd 100644
--- a/src/Core/Resolvers/IQueryBuilder.cs
+++ b/src/Core/Resolvers/IQueryBuilder.cs
@@ -84,5 +84,11 @@ public interface IQueryBuilder
/// Adds database specific quotes to string identifier
///
public string QuoteIdentifier(string identifier);
+
+ ///
+ /// Adds database specific quotes to the table name when used as part of a
+ /// DB Connection Param.
+ ///
+ public string QuoteTableNameAsDBConnectionParam(string param);
}
}
diff --git a/src/Core/Resolvers/MsSqlQueryBuilder.cs b/src/Core/Resolvers/MsSqlQueryBuilder.cs
index 34f38b0eaf..40f201387f 100644
--- a/src/Core/Resolvers/MsSqlQueryBuilder.cs
+++ b/src/Core/Resolvers/MsSqlQueryBuilder.cs
@@ -594,5 +594,11 @@ public string BuildFetchEnabledTriggersQuery()
return query;
}
+
+ public string QuoteTableNameAsDBConnectionParam(string param)
+ {
+ // Table names in MSSQL should not be quoted when used as DB Connection Params.
+ return param;
+ }
}
}
diff --git a/src/Core/Resolvers/MySqlQueryBuilder.cs b/src/Core/Resolvers/MySqlQueryBuilder.cs
index 2727bd4b9d..e8300973a4 100644
--- a/src/Core/Resolvers/MySqlQueryBuilder.cs
+++ b/src/Core/Resolvers/MySqlQueryBuilder.cs
@@ -367,5 +367,11 @@ public string BuildStoredProcedureResultDetailsQuery(string databaseObjectName)
{
throw new NotImplementedException();
}
+
+ public string QuoteTableNameAsDBConnectionParam(string param)
+ {
+ // Table names in MySQL should not be quoted when used as DB Connection Params.
+ return param;
+ }
}
}
diff --git a/src/Core/Resolvers/PostgresQueryBuilder.cs b/src/Core/Resolvers/PostgresQueryBuilder.cs
index 73c9bc907f..244b1a45b8 100644
--- a/src/Core/Resolvers/PostgresQueryBuilder.cs
+++ b/src/Core/Resolvers/PostgresQueryBuilder.cs
@@ -241,5 +241,12 @@ public string BuildQueryToGetReadOnlyColumns(string schemaParamName, string tabl
$"WHERE attrelid = ({schemaParamName} || '.' || {tableParamName})::regclass AND attgenerated = 's';";
return query;
}
+
+ public string QuoteTableNameAsDBConnectionParam(string param)
+ {
+ // PostreSQL uses same quoting for table name as DB Connection Param
+ // as when used directly in SQL text.
+ return QuoteIdentifier(param);
+ }
}
}
diff --git a/src/Core/Services/MetadataProviders/SqlMetadataProvider.cs b/src/Core/Services/MetadataProviders/SqlMetadataProvider.cs
index 1e6e61edf0..40af0182e3 100644
--- a/src/Core/Services/MetadataProviders/SqlMetadataProvider.cs
+++ b/src/Core/Services/MetadataProviders/SqlMetadataProvider.cs
@@ -1355,12 +1355,13 @@ private async Task PopulateSourceDefinitionAsync(
private async Task PopulateColumnDefinitionsWithReadOnlyFlag(string tableName, string schemaOrDatabaseName, SourceDefinition sourceDefinition)
{
string schemaOrDatabaseParamName = $"{BaseQueryStructure.PARAM_NAME_PREFIX}param0";
+ string quotedTableName = SqlQueryBuilder.QuoteTableNameAsDBConnectionParam(tableName);
string tableParamName = $"{BaseQueryStructure.PARAM_NAME_PREFIX}param1";
string queryToGetReadOnlyColumns = SqlQueryBuilder.BuildQueryToGetReadOnlyColumns(schemaOrDatabaseParamName, tableParamName);
Dictionary parameters = new()
{
{ schemaOrDatabaseParamName, new(schemaOrDatabaseName, DbType.String) },
- { tableParamName, new(tableName, DbType.String) }
+ { tableParamName, new(quotedTableName, DbType.String) }
};
List? readOnlyFields = await QueryExecutor.ExecuteQueryAsync(