mirror of
https://github.com/github/codeql.git
synced 2026-04-25 16:55:19 +02:00
Ruby: Finish the test for UseDetect
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
| UseDetect.rb:5:9:5:36 | call to first | Replace this call with 'detect'. |
|
||||
| UseDetect.rb:6:9:6:35 | call to last | Replace this call with 'reverse_detect'. |
|
||||
| UseDetect.rb:7:9:7:33 | ...[...] | Replace this call with 'detect'. |
|
||||
| UseDetect.rb:8:9:8:34 | ...[...] | Replace this call with 'reverse_detect'. |
|
||||
| UseDetect.rb:9:9:9:36 | call to first | Replace this call with 'detect'. |
|
||||
| UseDetect.rb:10:9:10:37 | call to last | Replace this call with 'reverse_detect'. |
|
||||
@@ -0,0 +1 @@
|
||||
queries/performance/UseDetect.ql
|
||||
@@ -1,128 +1,16 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "cases/helper"
|
||||
require "models/post"
|
||||
require "models/comment"
|
||||
class DetectTest
|
||||
def test
|
||||
# These are bad
|
||||
[].select { |i| true }.first
|
||||
[].select { |i| true }.last
|
||||
[].select { |i| true }[0]
|
||||
[].select { |i| true }[-1]
|
||||
[].filter { |i| true }.first
|
||||
[].find_all { |i| true }.last
|
||||
|
||||
module ActiveRecord
|
||||
module ConnectionAdapters
|
||||
class Mysql2SchemaTest < ActiveRecord::Mysql2TestCase
|
||||
fixtures :posts
|
||||
|
||||
def setup
|
||||
@connection = ActiveRecord::Base.connection
|
||||
db = Post.connection_pool.db_config.database
|
||||
table = Post.table_name
|
||||
@db_name = db
|
||||
|
||||
@omgpost = Class.new(ActiveRecord::Base) do
|
||||
self.inheritance_column = :disabled
|
||||
self.table_name = "#{db}.#{table}"
|
||||
def self.name; "Post"; end
|
||||
end
|
||||
end
|
||||
|
||||
def test_float_limits
|
||||
@connection.create_table :mysql_doubles do |t|
|
||||
t.float :float_no_limit
|
||||
t.float :float_short, limit: 5
|
||||
t.float :float_long, limit: 53
|
||||
|
||||
t.float :float_23, limit: 23
|
||||
t.float :float_24, limit: 24
|
||||
t.float :float_25, limit: 25
|
||||
end
|
||||
|
||||
column_no_limit = @connection.columns(:mysql_doubles).find { |c| c.name == "float_no_limit" }
|
||||
column_short = @connection.columns(:mysql_doubles).find { |c| c.name == "float_short" }
|
||||
column_long = @connection.columns(:mysql_doubles).find { |c| c.name == "float_long" }
|
||||
|
||||
column_23 = @connection.columns(:mysql_doubles).find { |c| c.name == "float_23" }
|
||||
column_24 = @connection.columns(:mysql_doubles).find { |c| c.name == "float_24" }
|
||||
column_25 = @connection.columns(:mysql_doubles).find { |c| c.name == "float_25" }
|
||||
|
||||
# MySQL floats are precision 0..24, MySQL doubles are precision 25..53
|
||||
assert_equal 24, column_no_limit.limit
|
||||
assert_equal 24, column_short.limit
|
||||
assert_equal 53, column_long.limit
|
||||
|
||||
assert_equal 24, column_23.limit
|
||||
assert_equal 24, column_24.limit
|
||||
assert_equal 53, column_25.limit
|
||||
ensure
|
||||
@connection.drop_table "mysql_doubles", if_exists: true
|
||||
end
|
||||
|
||||
def test_schema
|
||||
assert @omgpost.first
|
||||
end
|
||||
|
||||
def test_primary_key
|
||||
assert_equal "id", @omgpost.primary_key
|
||||
end
|
||||
|
||||
def test_data_source_exists?
|
||||
name = @omgpost.table_name
|
||||
assert @connection.data_source_exists?(name), "#{name} data_source should exist"
|
||||
end
|
||||
|
||||
def test_data_source_exists_wrong_schema
|
||||
assert_not(@connection.data_source_exists?("#{@db_name}.zomg"), "data_source should not exist")
|
||||
end
|
||||
|
||||
def test_dump_indexes
|
||||
index_a_name = "index_key_tests_on_snack"
|
||||
index_b_name = "index_key_tests_on_pizza"
|
||||
index_c_name = "index_key_tests_on_awesome"
|
||||
|
||||
table = "key_tests"
|
||||
|
||||
indexes = @connection.indexes(table).sort_by(&:name)
|
||||
assert_equal 3, indexes.size
|
||||
|
||||
index_a = indexes.select { |i| i.name == index_a_name }[0]
|
||||
index_b = indexes.select { |i| i.name == index_b_name }[0]
|
||||
index_c = indexes.select { |i| i.name == index_c_name }[0]
|
||||
assert_equal :btree, index_a.using
|
||||
assert_nil index_a.type
|
||||
assert_equal :btree, index_b.using
|
||||
assert_nil index_b.type
|
||||
|
||||
assert_nil index_c.using
|
||||
assert_equal :fulltext, index_c.type
|
||||
end
|
||||
|
||||
unless mysql_enforcing_gtid_consistency?
|
||||
def test_drop_temporary_table
|
||||
@connection.transaction do
|
||||
@connection.create_table(:temp_table, temporary: true)
|
||||
# if it doesn't properly say DROP TEMPORARY TABLE, the transaction commit
|
||||
# will complain that no transaction is active
|
||||
@connection.drop_table(:temp_table, temporary: true)
|
||||
end
|
||||
end
|
||||
end
|
||||
# These are good
|
||||
[].select("").first
|
||||
[].select { |i| true }[1]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class Mysql2AnsiQuotesTest < ActiveRecord::Mysql2TestCase
|
||||
def setup
|
||||
@connection = ActiveRecord::Base.connection
|
||||
@connection.execute("SET SESSION sql_mode='ANSI_QUOTES'")
|
||||
end
|
||||
|
||||
def teardown
|
||||
@connection.reconnect!
|
||||
end
|
||||
|
||||
def test_primary_key_method_with_ansi_quotes
|
||||
assert_equal "id", @connection.primary_key("topics")
|
||||
end
|
||||
|
||||
def test_foreign_keys_method_with_ansi_quotes
|
||||
fks = @connection.foreign_keys("lessons_students")
|
||||
assert_equal([["lessons_students", "students", :cascade]],
|
||||
fks.map { |fk| [fk.from_table, fk.to_table, fk.on_delete] })
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user