From 8ad6334fd227274ad7e8d6a794c82fefc94bf8ef Mon Sep 17 00:00:00 2001 From: "Ruy R." <108208+ruyrocha@users.noreply.github.com> Date: Thu, 25 Jan 2024 17:28:14 -0300 Subject: [PATCH 1/2] Add Trilogy adapter. --- autoload/db/adapter/trilogy.vim | 52 +++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 autoload/db/adapter/trilogy.vim diff --git a/autoload/db/adapter/trilogy.vim b/autoload/db/adapter/trilogy.vim new file mode 100644 index 0000000..fee67db --- /dev/null +++ b/autoload/db/adapter/trilogy.vim @@ -0,0 +1,52 @@ +function! db#adapter#trilogy#canonicalize(url) abort + let url = substitute(a:url, '^trilogy:/\@!', 'mysql:///', '') + " JDBC + let url = substitute(url, '//address=(\(.*\))\(/[^#]*\)', '\="//".submatch(2)."&".substitute(submatch(1), ")(", "\\&", "g")', '') + let url = substitute(url, '[&?]', '?', '') + " Fix for containers running on localhost + let url = substitute(url, 'localhost', '127.0.0.1', '') + return db#url#absorb_params(url, { + \ 'user': 'user', + \ 'password': 'password', + \ 'path': 'host', + \ 'host': 'host', + \ 'port': 'port'}) +endfunction + +function! s:command_for_url(url) abort + let params = db#url#parse(a:url).params + let command = ['mysql'] + + for i in keys(params) + let command += ['--'.i.'='.params[i]] + endfor + + return command + db#url#as_argv(a:url, '-h ', '-P ', '-S ', '-u ', '-p', '') +endfunction + +function! db#adapter#trilogy#interactive(url) abort + return s:command_for_url(a:url) +endfunction + +function! db#adapter#trilogy#filter(url) abort + return s:command_for_url(a:url) + ['-t'] +endfunction + +function! db#adapter#trilogy#auth_pattern() abort + return '^ERROR 104[45] ' +endfunction + +function! db#adapter#trilogy#complete_opaque(url) abort + return db#adapter#trilogy#complete_database('mysql:///') +endfunction + +function! db#adapter#trilogy#complete_database(url) abort + let pre = matchstr(a:url, '[^:]\+://.\{-\}/') + let cmd = s:command_for_url(pre) + let out = db#systemlist(cmd + ['-e', 'show databases']) + return out[1:-1] +endfunction + +function! db#adapter#trilogy#tables(url) abort + return db#systemlist(s:command_for_url(a:url) + ['-e', 'show tables'])[1:-1] +endfunction From 9a72c64c790a60b1209fa538e7b1a1fbde627f60 Mon Sep 17 00:00:00 2001 From: "Ruy R." <108208+ruyrocha@users.noreply.github.com> Date: Thu, 25 Jan 2024 18:11:58 -0300 Subject: [PATCH 2/2] Fix URL and DB schemes. --- autoload/db/adapter/trilogy.vim | 4 +++- plugin/dadbod.vim | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/autoload/db/adapter/trilogy.vim b/autoload/db/adapter/trilogy.vim index fee67db..ebc5fe0 100644 --- a/autoload/db/adapter/trilogy.vim +++ b/autoload/db/adapter/trilogy.vim @@ -1,10 +1,12 @@ + function! db#adapter#trilogy#canonicalize(url) abort - let url = substitute(a:url, '^trilogy:/\@!', 'mysql:///', '') + let url = substitute(a:url, '^trilogy:', 'mysql:', '') " JDBC let url = substitute(url, '//address=(\(.*\))\(/[^#]*\)', '\="//".submatch(2)."&".substitute(submatch(1), ")(", "\\&", "g")', '') let url = substitute(url, '[&?]', '?', '') " Fix for containers running on localhost let url = substitute(url, 'localhost', '127.0.0.1', '') + return db#url#absorb_params(url, { \ 'user': 'user', \ 'password': 'password', diff --git a/plugin/dadbod.vim b/plugin/dadbod.vim index 1f45fd5..22729d5 100644 --- a/plugin/dadbod.vim +++ b/plugin/dadbod.vim @@ -23,6 +23,7 @@ call extend(g:, {'dbext_schemes': {}}, 'keep') call extend(g:dbext_schemes, { \ 'ASA': 'sybase', \ 'MYSQL': 'mysql', + \ 'TRILOGY': 'mysql', \ 'ORA': 'oracle', \ 'PGSQL': 'postgresql', \ 'SQLITE': 'sqlite',