Module: Kaisoku::TestMap::DependencyQueries
- Included in:
- Kaisoku::TestMap
- Defined in:
- lib/kaisoku/test_map/dependency_queries.rb
Instance Method Summary collapse
- #checksums_for_file(path) ⇒ Object
- #dependencies_for(entity) ⇒ Object
- #dependency_entity_count(path, adapter: nil) ⇒ Object
- #entities_for_changed_files(paths, adapter: nil) ⇒ Object
- #entities_for_dependency_keys(keys, adapter: nil) ⇒ Object
- #entities_with_dependency_prefixes(prefixes, adapter: nil) ⇒ Object
- #method_checksums_for_file(path) ⇒ Object
Instance Method Details
#checksums_for_file(path) ⇒ Object
15 16 17 18 |
# File 'lib/kaisoku/test_map/dependency_queries.rb', line 15 def checksums_for_file(path) file = configuration.relative_path(path) @db.execute('SELECT DISTINCT checksum FROM deps WHERE dep_file = ?', [file]).map { |row| row['checksum'] } end |
#dependencies_for(entity) ⇒ Object
6 7 8 9 10 11 12 13 |
# File 'lib/kaisoku/test_map/dependency_queries.rb', line 6 def dependencies_for(entity) id = entity_id(entity) return {} unless id @db.execute('SELECT dep_file, checksum FROM deps WHERE entity_id = ?', [id]).to_h do |row| [row['dep_file'], row['checksum']] end end |
#dependency_entity_count(path, adapter: nil) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/kaisoku/test_map/dependency_queries.rb', line 48 def dependency_entity_count(path, adapter: nil) file = configuration.relative_path(path) adapter_clause = adapter ? 'AND entities.adapter = ?' : '' bind = adapter ? [file, adapter.to_s] : [file] sql = <<~SQL SELECT COUNT(DISTINCT deps.entity_id) FROM deps INNER JOIN entities ON entities.id = deps.entity_id WHERE deps.dep_file = ? #{adapter_clause} SQL @db.get_first_value(sql, bind).to_i end |
#entities_for_changed_files(paths, adapter: nil) ⇒ Object
27 28 29 30 |
# File 'lib/kaisoku/test_map/dependency_queries.rb', line 27 def entities_for_changed_files(paths, adapter: nil) files = paths.map { |path| configuration.relative_path(path) }.uniq entities_for_dependency_keys(files, adapter: adapter) end |
#entities_for_dependency_keys(keys, adapter: nil) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/kaisoku/test_map/dependency_queries.rb', line 32 def entities_for_dependency_keys(keys, adapter: nil) return [] if keys.empty? adapter_clause = adapter ? 'AND entities.adapter = ?' : '' bind = adapter ? keys + [adapter.to_s] : keys sql = <<~SQL SELECT DISTINCT entities.* FROM entities INNER JOIN deps ON deps.entity_id = entities.id WHERE deps.dep_file IN (#{placeholders(keys)}) #{adapter_clause} ORDER BY entities.file ASC, entities.identifier ASC SQL @db.execute(sql, bind).map { |row| entity_from_row(row) } end |
#entities_with_dependency_prefixes(prefixes, adapter: nil) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/kaisoku/test_map/dependency_queries.rb', line 62 def entities_with_dependency_prefixes(prefixes, adapter: nil) return [] if prefixes.empty? clauses = prefixes.map { 'deps.dep_file LIKE ?' }.join(' OR ') bind = prefixes.map { |prefix| "#{prefix}%" } adapter_clause = adapter ? 'AND entities.adapter = ?' : '' bind << adapter.to_s if adapter sql = <<~SQL SELECT DISTINCT entities.* FROM entities INNER JOIN deps ON deps.entity_id = entities.id WHERE (#{clauses}) #{adapter_clause} ORDER BY entities.file ASC, entities.identifier ASC SQL @db.execute(sql, bind).map { |row| entity_from_row(row) } end |
#method_checksums_for_file(path) ⇒ Object
20 21 22 23 24 25 |
# File 'lib/kaisoku/test_map/dependency_queries.rb', line 20 def method_checksums_for_file(path) file = configuration.relative_path(path) @db.execute('SELECT dep_file, checksum FROM deps WHERE dep_file LIKE ?', ["#{file}#%"]).to_h do |row| [row['dep_file'], row['checksum']] end end |