From 05771592d91e9ea4104b61e5e782a86023e47f92 Mon Sep 17 00:00:00 2001 From: Kevin Cunnane Date: Tue, 13 Jun 2017 12:39:10 -0700 Subject: [PATCH] Fix support for SQL DW in Edit Data scenarios (#379) - SQL DW does not support SESSIONPROPERTY. Verified that the correct return values are "true" for both values on all DW instances --- .../ReliableSqlConnection.cs | 35 ++++++++++++------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/Connection/ReliableConnection/ReliableSqlConnection.cs b/src/Microsoft.SqlTools.ServiceLayer/Connection/ReliableConnection/ReliableSqlConnection.cs index 5696d2be..8120b2e8 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Connection/ReliableConnection/ReliableSqlConnection.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Connection/ReliableConnection/ReliableSqlConnection.cs @@ -512,25 +512,34 @@ SET NUMERIC_ROUNDABORT OFF;"; Tuple[] sessionSettings = new Tuple[2]; IDbConnection connection = originalCommand.Connection; - using (IDbCommand localCommand = connection.CreateCommand()) + if (IsSqlDwConnection(connection)) { - // Executing a reader requires preservation of any pending transaction created by the calling command - localCommand.Transaction = originalCommand.Transaction; - localCommand.CommandText = "SELECT ISNULL(SESSIONPROPERTY ('ANSI_NULLS'), 0), ISNULL(SESSIONPROPERTY ('QUOTED_IDENTIFIER'), 1)"; - using (IDataReader reader = localCommand.ExecuteReader()) + // SESSIONPROPERTY is not supported. Use default values for now + sessionSettings[0] = Tuple.Create("ANSI_NULLS", true); + sessionSettings[1] = Tuple.Create("QUOTED_IDENTIFIER", true); + } + else + { + using (IDbCommand localCommand = connection.CreateCommand()) { - if (reader.Read()) + // Executing a reader requires preservation of any pending transaction created by the calling command + localCommand.Transaction = originalCommand.Transaction; + localCommand.CommandText = "SELECT ISNULL(SESSIONPROPERTY ('ANSI_NULLS'), 0), ISNULL(SESSIONPROPERTY ('QUOTED_IDENTIFIER'), 1)"; + using (IDataReader reader = localCommand.ExecuteReader()) { - sessionSettings[0] = Tuple.Create("ANSI_NULLS", ((int)reader[0] == 1)); - sessionSettings[1] = Tuple.Create("QUOTED_IDENTIFIER", ((int)reader[1] ==1)); - } - else - { - Debug.Assert(false, "Reader cannot be empty"); + if (reader.Read()) + { + sessionSettings[0] = Tuple.Create("ANSI_NULLS", ((int)reader[0] == 1)); + sessionSettings[1] = Tuple.Create("QUOTED_IDENTIFIER", ((int)reader[1] ==1)); + } + else + { + Debug.Assert(false, "Reader cannot be empty"); + } } } - return sessionSettings; } + return sessionSettings; } private void SetSessionSettings(IDbConnection connection, params Tuple[] settings)