dbviewer 0.3.6 → 0.3.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dbviewer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.6
4
+ version: 0.3.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wailan Tirajoh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-05-21 00:00:00.000000000 Z
11
+ date: 2025-05-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -64,19 +64,13 @@ files:
64
64
  - app/jobs/dbviewer/application_job.rb
65
65
  - app/mailers/dbviewer/application_mailer.rb
66
66
  - app/models/dbviewer/application_record.rb
67
- - app/services/dbviewer/file_storage.rb
68
- - app/services/dbviewer/in_memory_storage.rb
69
- - app/services/dbviewer/query_analyzer.rb
70
- - app/services/dbviewer/query_collection.rb
71
- - app/services/dbviewer/query_logger.rb
72
- - app/services/dbviewer/query_parser.rb
73
- - app/services/dbviewer/query_storage.rb
74
67
  - app/views/dbviewer/entity_relationship_diagrams/index.html.erb
75
68
  - app/views/dbviewer/home/index.html.erb
76
69
  - app/views/dbviewer/logs/index.html.erb
77
70
  - app/views/dbviewer/shared/_sidebar.html.erb
78
71
  - app/views/dbviewer/tables/_table_structure.html.erb
79
72
  - app/views/dbviewer/tables/index.html.erb
73
+ - app/views/dbviewer/tables/mini_erd.html.erb
80
74
  - app/views/dbviewer/tables/query.html.erb
81
75
  - app/views/dbviewer/tables/show.html.erb
82
76
  - app/views/layouts/dbviewer/application.html.erb
@@ -98,6 +92,8 @@ files:
98
92
  - lib/dbviewer/storage/file_storage.rb
99
93
  - lib/dbviewer/storage/in_memory_storage.rb
100
94
  - lib/dbviewer/table_metadata_manager.rb
95
+ - lib/dbviewer/table_query_operations.rb
96
+ - lib/dbviewer/table_query_params.rb
101
97
  - lib/dbviewer/version.rb
102
98
  - lib/tasks/dbviewer_tasks.rake
103
99
  homepage: https://github.com/wailantirajoh/dbviewer
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,82 +0,0 @@
1
- module Dbviewer
2
- # QueryParser handles parsing SQL queries and extracting useful information
3
- class QueryParser
4
- # Extract table names from an SQL query string
5
- def self.extract_tables(sql)
6
- return [] if sql.nil?
7
-
8
- # Convert to lowercase for case-insensitive matching
9
- sql = sql.downcase
10
-
11
- # Extract table names after FROM or JOIN
12
- sql.scan(/(?:from|join)\s+[`"']?(\w+)[`"']?/).flatten.uniq
13
- end
14
-
15
- # Normalize a SQL query to find similar patterns
16
- # Replaces specific values with placeholders
17
- def self.normalize(sql)
18
- return "" if sql.nil?
19
-
20
- sql.gsub(/\b\d+\b/, "N")
21
- .gsub(/'[^']*'/, "'X'")
22
- .gsub(/"[^"]*"/, '"X"')
23
- end
24
-
25
- # Check if the query is from the DBViewer library
26
- def self.from_dbviewer?(event)
27
- # Check if the SQL itself references DBViewer tables
28
- if event.payload[:sql].match(/\b(from|join|update|into)\s+["`']?dbviewer_/i)
29
- return true
30
- end
31
-
32
- # Check the caller information if available
33
- caller = event.payload[:caller]
34
- if caller.is_a?(String) && caller.include?("/dbviewer/")
35
- return true
36
- end
37
-
38
- # Check if query name indicates it's from DBViewer
39
- if event.payload[:name].is_a?(String) &&
40
- (event.payload[:name].include?("Dbviewer") || event.payload[:name].include?("DBViewer") || event.payload[:name] == "SQL")
41
- return true
42
- end
43
-
44
- # Check for common DBViewer operations
45
- sql = event.payload[:sql].downcase
46
- if sql.include?("table_structure") ||
47
- sql.include?("schema_migrations") ||
48
- sql.include?("database_analytics")
49
- return true
50
- end
51
-
52
- false
53
- end
54
-
55
- # Format bind parameters for storage
56
- def self.format_binds(binds)
57
- return [] unless binds.respond_to?(:map)
58
-
59
- binds.map do |bind|
60
- if bind.respond_to?(:value)
61
- bind.value
62
- elsif bind.is_a?(Array) && bind.size == 2
63
- bind.last
64
- else
65
- bind.to_s
66
- end
67
- end
68
- rescue
69
- []
70
- end
71
-
72
- # Determine if a query should be skipped based on content
73
- def self.should_skip_query?(event)
74
- event.payload[:name] == "SCHEMA" ||
75
- event.payload[:sql].include?("SHOW TABLES") ||
76
- event.payload[:sql].include?("sqlite_master") ||
77
- event.payload[:sql].include?("information_schema") ||
78
- event.payload[:sql].include?("pg_catalog") ||
79
- from_dbviewer?(event)
80
- end
81
- end
82
- end
File without changes