diff --git a/README.markdown b/README.markdown index fe7717a..f638d41 100644 --- a/README.markdown +++ b/README.markdown @@ -14,6 +14,7 @@ take on [dbext.vim][], improving on it on the following ways: - Impala - jq - MongoDB + - MotherDuck - MySQL - MariaDB - Oracle diff --git a/autoload/db/adapter/duckdb.vim b/autoload/db/adapter/duckdb.vim index 763cb51..d56dc85 100644 --- a/autoload/db/adapter/duckdb.vim +++ b/autoload/db/adapter/duckdb.vim @@ -33,7 +33,7 @@ function! db#adapter#duckdb#command(url) abort endfunction function! db#adapter#duckdb#interactive(url) abort - return db#adapter#duckdb#command(a:url) + ['-column', '-header'] + return db#adapter#duckdb#command(a:url) + ['-cmd', '.output'] endfunction function! db#adapter#duckdb#tables(url) abort diff --git a/autoload/db/adapter/md.vim b/autoload/db/adapter/md.vim new file mode 100644 index 0000000..404c9b2 --- /dev/null +++ b/autoload/db/adapter/md.vim @@ -0,0 +1,34 @@ +function! db#adapter#md#canonicalize(url) abort + return a:url +endfunction + +function! s:dbname(url) abort + let parsed = db#url#parse(a:url) + if has_key(parsed, 'opaque') + return parsed.opaque + endif + return '' +endfunction + +function! db#adapter#md#dbext(url) abort + return {'dbname': s:dbname(a:url)} +endfunction + +function! db#adapter#md#command(url) abort + if a:url != '' + return ['duckdb', a:url] + endif + return ['duckdb', 'md:'] +endfunction + +function! db#adapter#md#interactive(url) abort + return db#adapter#md#command(a:url) + ['-cmd', '.output'] +endfunction + +function! db#adapter#md#tables(url) abort + return split(join(db#systemlist(db#adapter#md#command(a:url) + ['-noheader', '-c', '.tables']))) +endfunction + +function! db#adapter#md#massage(input) abort + return a:input . "\n;" +endfunction diff --git a/doc/dadbod.txt b/doc/dadbod.txt index 88c63f2..6249f86 100644 --- a/doc/dadbod.txt +++ b/doc/dadbod.txt @@ -143,6 +143,20 @@ MongoDB ~ < Any valid MongoDB connection string URI can be used. + *dadbod-md* +MotherDuck ~ +> + md: + md:[] +< +MotherDuck authenticates using a token stored as an environment variable +`motherduck_token`. If this environment variable is missing, all invocations +will open a browser and prompt the user to login to the MotherDuck console. + +If the database is provided, it will be used as the default database (so +queries do not have to specify a database. If not, queries must specify a +database. + *dadbod-mysql* MySQL ~ >