annotate autoload/dbtables.vim @ 1:8530ebeda72c

Adding actual db tables implementation from original script.
author Luka Sitas <lsitas@avatarasoftware.com>
date Wed, 11 Mar 2026 08:53:55 -0400
parents 238b45cc333b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
238b45cc333b Initial Commit
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
1 " autoload/dbtables.vim
238b45cc333b Initial Commit
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
2 " Functions are loaded on demand
238b45cc333b Initial Commit
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
3
1
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
4 if exists('*dbtables#*')
0
238b45cc333b Initial Commit
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
5 finish
238b45cc333b Initial Commit
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
6 endif
238b45cc333b Initial Commit
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
7
1
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
8
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
9
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
10 "=============================================
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
11 " Utilities
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
12 "=============================================
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
13
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
14 let s:query_history = []
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
15 let s:snippets = []
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
16
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
17
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
18
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
19 " - - - - - - - - - - - - - - - - - - - - - -
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
20 " DB/shell interaction
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
21 " - - - - - - - - - - - - - - - - - - - - - -
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
22
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
23 " Execute shell commands
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
24 function! s:ExecuteShellCommand(command)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
25 let result = system(a:command . ' 2>&1')
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
26 return [v:shell_error == 0, result]
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
27 endfunction
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
28
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
29 " Execute a SQL query, directly to the db
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
30 function! s:ExecuteDBQuery(query)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
31 let command = printf('mariadb --user=%s --password=%s --database=%s --host=%s -e %s',
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
32 \ shellescape(g:db_user), shellescape(g:db_password),
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
33 \ shellescape(g:db_name), shellescape(g:db_host),
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
34 \ shellescape(a:query))
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
35
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
36 let [success, result] = s:ExecuteShellCommand(command)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
37 if success
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
38 return split(result, "\n")
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
39 else
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
40 call s:HandleDBError(result, command)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
41 return []
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
42 endif
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
43 endfunction
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
44
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
45 " Function to execute SQL from the current buffer with parameter prompt
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
46 function! dbtables#ExecuteSQLQuery()
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
47 let query = join(getline(1, '$'), "\n")
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
48 call s:PromptAndExecuteQuery(query)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
49 endfunction
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
50
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
51 " Function to execute SQL from a visual selection with parameter prompt
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
52 function! dbtables#ExecuteVisualSQLQuery() range
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
53 " Get the content of the selected lines as a single SQL query
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
54 let lines = getline(a:firstline, a:lastline)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
55 let query = join(lines, "\n")
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
56
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
57 " Execute query with prompt for parameters
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
58 call s:PromptAndExecuteQuery(query)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
59 endfunction
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
60
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
61 " Handle parameter prompts and execute query
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
62 function! s:PromptAndExecuteQuery(query)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
63 " Identify parameters in the form of :parameter_name
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
64 let pattern = ':\(\k\+\)'
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
65 let params = []
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
66
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
67 " Find all matches in the query
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
68 let start = 0
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
69 while match(a:query, pattern, start) != -1
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
70 let match = matchstr(a:query, pattern, start)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
71 if index(params, match) == -1
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
72 call add(params, match)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
73 endif
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
74 let start = matchend(a:query, pattern, start)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
75 endwhile
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
76
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
77 " Initialize a dictionary for parameters and their values
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
78 let param_values = {}
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
79
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
80 " Prompt user for each parameter
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
81 for param in params
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
82 let value = input('Enter value for ' . param . ': ')
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
83 let param_values[param] = value
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
84 endfor
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
85
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
86 " Replace parameters in the query with user-provided values
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
87 let updated_query = a:query
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
88 for [param, value] in items(param_values)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
89 let updated_query = substitute(updated_query, param, value, 'g')
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
90 endfor
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
91
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
92 call add(s:query_history, updated_query)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
93 call s:OpenInNewTab('SQLQueryResult', s:ExecuteDBQuery(updated_query))
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
94 endfunction
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
95
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
96 " Handle database command errors
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
97 function! s:HandleDBError(result, command)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
98 echoerr 'Shell command failed: ' . a:command
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
99 if a:result =~# 'Access denied'
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
100 echoerr 'Authentication error: Check your username and password.'
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
101 elseif a:result =~# 'Unknown database'
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
102 echoerr 'Database error: The specified database does not exist.'
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
103 elseif a:result =~# 'Could not connect'
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
104 echoerr 'Connection error: Verify host and network connectivity.'
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
105 elseif a:result =~# 'You have an error in your SQL syntax'
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
106 echoerr 'Syntax error in SQL query.'
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
107 else
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
108 echoerr 'Unexpected error: ' . a:result
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
109 endif
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
110 endfunction
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
111
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
112
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
113
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
114 " - - - - - - - - - - - - - - - - - - - - - -
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
115 " Visuals
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
116 " - - - - - - - - - - - - - - - - - - - - - -
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
117
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
118 " Display data in a new read only buffer
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
119 function! s:OpenInNewTab(title, data)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
120 tabnew
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
121 enew
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
122 execute 'file ' . a:title
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
123 if !empty(a:data)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
124 call append(0, a:data)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
125 else
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
126 call append(0, 'No data found or an error occurred.')
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
127 endif
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
128 setlocal filetype=sql buftype=nofile bufhidden=wipe nobuflisted noswapfile nomodifiable
0
238b45cc333b Initial Commit
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
129 endfunction
1
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
130
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
131
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
132
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
133 "=============================================
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
134 " DBTables
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
135 "=============================================
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
136 " Open the list of tables in the database as a
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
137 " buffer on the right side. Selecting a table
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
138 " shows either the tables schema or the data
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
139 " in the table.
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
140
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
141 function! dbtables#OpenDBTablesWindow()
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
142 execute '34 vsplit'
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
143 enew
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
144 file DBTables
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
145 let tables = s:ExecuteDBQuery("SHOW TABLES;")
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
146 if empty(tables)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
147 echo "No tables found or an error occurred."
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
148 else
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
149 call append(0, ['Available Tables:'] + tables[1:])
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
150 setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
151 \ nomodifiable nonumber norelativenumber winfixwidth
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
152 nnoremap <buffer> <CR> :call <SID>ShowTablePopup()<CR>
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
153 endif
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
154 endfunction
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
155
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
156 " Open the database schema
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
157 function! s:OpenTableSchema(table)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
158 call s:OpenInNewTab(a:table . '_schema', s:ExecuteDBQuery('DESCRIBE ' . a:table . ';'))
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
159 endfunction
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
160
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
161 " Open the table data
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
162 function! s:OpenTableData(table)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
163 call s:OpenInNewTab(a:table, s:ExecuteDBQuery('SELECT * FROM ' . a:table . ';'))
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
164 endfunction
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
165
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
166 let s:popup_table = ""
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
167
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
168 " Popup selection for table actions
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
169 function! s:ShowTablePopup()
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
170 " Use Vim popup_menu if available
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
171 if exists('*popup_menu')
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
172 let s:popup_table = getline(line('.'))
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
173 let items = ['View Data', 'View Schema', 'Cancel']
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
174 call popup_menu(items, #{
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
175 \ callback: '<SID>HandlePopupSelection',
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
176 \ })
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
177 return
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
178 endif
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
179 " Popup_menu not available
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
180 echoerr 'Floating popup requires Vim8.2+.'
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
181 call s:ShowTableMenuModal()
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
182 endfunction
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
183
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
184 function! s:HandlePopupSelection(id, result)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
185 let table = s:popup_table
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
186 call s:ClosePopup()
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
187 if a:result == 1
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
188 call s:OpenTableData(table)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
189 elseif a:result == 2
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
190 call s:OpenTableSchema(table)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
191 endif
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
192 endfunction
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
193
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
194 function! s:ClosePopup()
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
195 unlet! s:popup_table
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
196 endfunction
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
197
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
198
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
199
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
200 "=============================================
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
201 " Query History
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
202 "=============================================
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
203 " Shows the list of recently ran queries.
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
204 " Selecting a query will re-run it.
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
205
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
206 " View query history
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
207 function! dbtables#OpenQueryHistory()
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
208 " Open the query history in a new split window
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
209 execute 'vsplit'
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
210 enew
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
211 call setline(1, s:query_history)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
212 nnoremap <buffer> <CR> :call s:OpenInNewTab('SQLQueryResult',
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
213 \ s:ExecuteDBQuery(getline(line('.'))))<CR>
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
214 setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile wrap
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
215 endfunction
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
216
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
217
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
218
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
219 "=============================================
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
220 " Query Snippets
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
221 "=============================================
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
222 " Shows the list of pre-set query snippets.
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
223 " Selecting a snippet will open it in a new
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
224 " tab to be executed or modified.
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
225
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
226 " View query snippets
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
227 function! dbtables#OpenQuerySnippets()
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
228 " Open the query snippets in a new split window
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
229 execute '34 vsplit'
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
230 enew
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
231
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
232 " Populate the buffer with the list of snippet files
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
233 let s:snippets = globpath(g:snippets_directory, '*', 0, 1)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
234 let l:display = mapnew(s:snippets, 'fnamemodify(v:val, ":t:r")')
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
235 call setline(1, l:display)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
236
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
237 nnoremap <buffer> <CR> :call s:OpenInNewTab(line('.'),
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
238 \ fnameescape(s:snippets[a:lnum-1]))<CR>
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
239
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
240 setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile wrap
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
241 endfunction
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
242
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
243
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
244
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
245 "=============================================
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
246 " DB Console
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
247 "=============================================
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
248 " Opens a console to interact with the DB.
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
249
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
250 " Open MariaDB console
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
251 function! dbtables#DBConsole()
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
252 " Save the current cursor position
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
253 let save_cursor = getpos(".")
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
254 let command = printf('mariadb --user=%s --password=%s --database=%s --host=%s',
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
255 \ g:db_user, g:db_password,
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
256 \ g:db_name, g:db_host)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
257
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
258 let command = substitute(command, '\n', '', 'g')
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
259 execute ':term ' . command
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
260 call setpos(".", save_cursor)
8530ebeda72c Adding actual db tables implementation from original script.
Luka Sitas <lsitas@avatarasoftware.com>
parents: 0
diff changeset
261 endfunction