@@ -187,10 +187,9 @@ def initialize_native_database_types
187187 end
188188
189189 def column_definitions ( table_name )
190- db_name = SQLServer ::Utils . extract_identifiers ( table_name ) . database
191- db_name_with_period = "#{ db_name } ." if db_name
192- table_schema = SQLServer ::Utils . extract_identifiers ( table_name ) . schema
193- table_name = SQLServer ::Utils . extract_identifiers ( table_name ) . object
190+ identifier = SQLServer ::Utils . extract_identifiers ( table_name )
191+ database = "#{ identifier . database_quoted } ." if identifier . database_quoted
192+ table_name = identifier . quoted
194193 sql = %{
195194 SELECT DISTINCT
196195 #{ lowercase_schema_reflection_sql ( 'columns.TABLE_NAME' ) } AS table_name,
@@ -203,7 +202,7 @@ def column_definitions(table_name)
203202 columns.ordinal_position,
204203 CASE
205204 WHEN columns.DATA_TYPE IN ('nchar','nvarchar') THEN columns.CHARACTER_MAXIMUM_LENGTH
206- ELSE COL_LENGTH('#{ db_name_with_period } '+columns.TABLE_SCHEMA+'.'+columns.TABLE_NAME, columns.COLUMN_NAME)
205+ ELSE COL_LENGTH('#{ database } '+columns.TABLE_SCHEMA+'.'+columns.TABLE_NAME, columns.COLUMN_NAME)
207206 END AS [length],
208207 CASE
209208 WHEN columns.IS_NULLABLE = 'YES' THEN 1
@@ -214,32 +213,32 @@ def column_definitions(table_name)
214213 ELSE NULL
215214 END AS [is_primary],
216215 c.is_identity AS [is_identity]
217- FROM #{ db_name_with_period } INFORMATION_SCHEMA.COLUMNS columns
218- LEFT OUTER JOIN #{ db_name_with_period } INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC
216+ FROM #{ database } INFORMATION_SCHEMA.COLUMNS columns
217+ LEFT OUTER JOIN #{ database } INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC
219218 ON TC.TABLE_NAME = columns.TABLE_NAME
220219 AND TC.CONSTRAINT_TYPE = N'PRIMARY KEY'
221- LEFT OUTER JOIN #{ db_name_with_period } INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU
220+ LEFT OUTER JOIN #{ database } INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU
222221 ON KCU.COLUMN_NAME = columns.COLUMN_NAME
223222 AND KCU.CONSTRAINT_NAME = TC.CONSTRAINT_NAME
224223 AND KCU.CONSTRAINT_CATALOG = TC.CONSTRAINT_CATALOG
225224 AND KCU.CONSTRAINT_SCHEMA = TC.CONSTRAINT_SCHEMA
226- INNER JOIN #{ db_name } .sys.schemas AS s
225+ INNER JOIN #{ identifier . database_quoted } .sys.schemas AS s
227226 ON s.name = columns.TABLE_SCHEMA
228227 AND s.schema_id = s.schema_id
229- INNER JOIN #{ db_name } .sys.objects AS o
228+ INNER JOIN #{ identifier . database_quoted } .sys.objects AS o
230229 ON s.schema_id = o.schema_id
231230 AND o.is_ms_shipped = 0
232231 AND o.type IN ('U', 'V')
233232 AND o.name = columns.TABLE_NAME
234- INNER JOIN #{ db_name } .sys.columns AS c
233+ INNER JOIN #{ identifier . database_quoted } .sys.columns AS c
235234 ON o.object_id = c.object_id
236235 AND c.name = columns.COLUMN_NAME
237236 WHERE columns.TABLE_NAME = @0
238- AND columns.TABLE_SCHEMA = #{ table_schema . blank? ? 'schema_name()' : '@1' }
237+ AND columns.TABLE_SCHEMA = #{ identifier . schema . blank? ? 'schema_name()' : '@1' }
239238 ORDER BY columns.ordinal_position
240239 } . gsub ( /[ \t \r \n ]+/ , ' ' )
241- binds = [ [ 'table_name' , table_name ] ]
242- binds << [ 'table_schema' , table_schema ] unless table_schema . blank?
240+ binds = [ [ 'table_name' , identifier . object ] ]
241+ binds << [ 'table_schema' , identifier . schema ] unless identifier . schema . blank?
243242 results = do_exec_query ( sql , 'SCHEMA' , binds )
244243 results . map do |ci |
245244 ci = ci . symbolize_keys
@@ -257,10 +256,10 @@ def column_definitions(table_name)
257256 else
258257 ci [ :type ]
259258 end
260- if ci [ :default_value ] . nil? && schema_cache . view_names . include ?( table_name )
259+ if ci [ :default_value ] . nil? && schema_cache . view_exists ?( table_name )
261260 real_table_name = table_name_or_views_table_name ( table_name )
262261 real_column_name = views_real_column_name ( table_name , ci [ :name ] )
263- col_default_sql = "SELECT c.COLUMN_DEFAULT FROM #{ db_name_with_period } INFORMATION_SCHEMA.COLUMNS c WHERE c.TABLE_NAME = '#{ real_table_name } ' AND c.COLUMN_NAME = '#{ real_column_name } '"
262+ col_default_sql = "SELECT c.COLUMN_DEFAULT FROM #{ database } INFORMATION_SCHEMA.COLUMNS c WHERE c.TABLE_NAME = '#{ real_table_name } ' AND c.COLUMN_NAME = '#{ real_column_name } '"
264263 ci [ :default_value ] = select_value col_default_sql , 'SCHEMA'
265264 end
266265 ci [ :default_value ] = case ci [ :default_value ]
@@ -306,13 +305,14 @@ def remove_indexes(table_name, column_name)
306305 # === SQLServer Specific (Misc Helpers) ========================= #
307306
308307 def get_table_name ( sql )
309- if sql =~ /^\s *(INSERT|EXEC sp_executesql N'INSERT)(\s +INTO)?\s +([^\( \s ]+)\s *|^\s *update\s +([^\( \s ]+)\s */i
308+ tn = if sql =~ /^\s *(INSERT|EXEC sp_executesql N'INSERT)(\s +INTO)?\s +([^\( \s ]+)\s *|^\s *update\s +([^\( \s ]+)\s */i
310309 Regexp . last_match [ 3 ] || Regexp . last_match [ 4 ]
311310 elsif sql =~ /FROM\s +([^\( \s ]+)\s */i
312311 Regexp . last_match [ 1 ]
313312 else
314313 nil
315314 end
315+ SQLServer ::Utils . extract_identifiers ( tn ) . object
316316 end
317317
318318 def default_constraint_name ( table_name , column_name )
@@ -344,19 +344,18 @@ def view_information(table_name)
344344 view_info = view_info . with_indifferent_access
345345 if view_info [ :VIEW_DEFINITION ] . blank? || view_info [ :VIEW_DEFINITION ] . length == 4000
346346 view_info [ :VIEW_DEFINITION ] = begin
347- select_values ( "EXEC sp_helptext #{ quote_table_name ( table_name ) } " , 'SCHEMA' ) . join
348- rescue
349- warn "No view definition found, possible permissions problem.\n Please run GRANT VIEW DEFINITION TO your_user;"
350- nil
351- end
347+ select_values ( "EXEC sp_helptext #{ quote_table_name ( table_name ) } " , 'SCHEMA' ) . join
348+ rescue
349+ warn "No view definition found, possible permissions problem.\n Please run GRANT VIEW DEFINITION TO your_user;"
350+ nil
351+ end
352352 end
353353 end
354354 view_info
355355 end
356356
357357 def table_name_or_views_table_name ( table_name )
358- unquoted_table_name = SQLServer ::Utils . extract_identifiers ( table_name ) . object
359- schema_cache . view_names . include? ( unquoted_table_name ) ? view_table_name ( unquoted_table_name ) : unquoted_table_name
358+ schema_cache . view_exists? ( table_name ) ? view_table_name ( table_name ) : table_name
360359 end
361360
362361 def views_real_column_name ( table_name , column_name )
0 commit comments