dbviewer 0.3.15 → 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.
- checksums.yaml +4 -4
- data/README.md +34 -2
- data/app/controllers/concerns/dbviewer/database_operations.rb +23 -21
- data/app/controllers/concerns/dbviewer/pagination_concern.rb +8 -0
- data/app/controllers/dbviewer/tables_controller.rb +100 -21
- data/app/helpers/dbviewer/application_helper.rb +73 -0
- data/app/views/dbviewer/shared/_sidebar.html.erb +146 -1
- data/app/views/dbviewer/tables/index.html.erb +7 -1
- data/app/views/dbviewer/tables/show.html.erb +361 -28
- data/lib/dbviewer/database_manager.rb +31 -115
- data/lib/dbviewer/query_analyzer.rb +130 -0
- data/lib/dbviewer/table_query_operations.rb +621 -0
- data/lib/dbviewer/table_query_params.rb +39 -0
- data/lib/dbviewer/version.rb +1 -1
- data/lib/dbviewer.rb +1 -0
- metadata +4 -9
- data/app/services/dbviewer/file_storage.rb +0 -0
- data/app/services/dbviewer/in_memory_storage.rb +0 -0
- data/app/services/dbviewer/query_analyzer.rb +0 -0
- data/app/services/dbviewer/query_collection.rb +0 -0
- data/app/services/dbviewer/query_logger.rb +0 -0
- data/app/services/dbviewer/query_parser.rb +0 -82
- data/app/services/dbviewer/query_storage.rb +0 -0
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.
|
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-
|
11
|
+
date: 2025-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -64,13 +64,6 @@ 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
|
@@ -99,6 +92,8 @@ files:
|
|
99
92
|
- lib/dbviewer/storage/file_storage.rb
|
100
93
|
- lib/dbviewer/storage/in_memory_storage.rb
|
101
94
|
- lib/dbviewer/table_metadata_manager.rb
|
95
|
+
- lib/dbviewer/table_query_operations.rb
|
96
|
+
- lib/dbviewer/table_query_params.rb
|
102
97
|
- lib/dbviewer/version.rb
|
103
98
|
- lib/tasks/dbviewer_tasks.rake
|
104
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
|