diff --git a/README.markdown b/README.markdown index da36ef8..23a54e6 100644 --- a/README.markdown +++ b/README.markdown @@ -10,6 +10,7 @@ take on [dbext.vim][], improving on it on the following ways: * Supports a modern array of backends, including NoSQL databases: - Big Query - ClickHouse + - DynamoDB - DuckDB - Impala - jq diff --git a/autoload/db/adapter/dynamodb.vim b/autoload/db/adapter/dynamodb.vim new file mode 100644 index 0000000..f5fb9f6 --- /dev/null +++ b/autoload/db/adapter/dynamodb.vim @@ -0,0 +1,43 @@ +function! s:command(url, output) abort + let url = db#url#parse(a:url) + let endpoint_url = [] + if has_key(url, 'user') + let profile = url.user + let http_url = 'http://' .. url.host .. ':' .. url.port + let endpoint_url = ['--endpoint-url', http_url] + else + if has_key(url, 'host') + let profile = url.host + else + let profile = 'default' + endif + endif + return ['aws', 'dynamodb', '--profile', profile, '--output', a:output] + endpoint_url +endfunction + +function! db#adapter#dynamodb#input_extension() abort + return 'js' +endfunction + +function! db#adapter#dynamodb#output_extension() abort + return 'json' +endfunction + +function! db#adapter#dynamodb#input(url, in) abort + if filereadable(a:in) + let lines = readfile(a:in) + return ['sh', '-c'] + [join(s:command(a:url, 'json') + split(lines[0]))] + endif + return ['echo', 'no', 'command'] +endfunction + +function! db#adapter#dynamodb#auth_input() abort + return v:false +endfunction + +function! db#adapter#dynamodb#tables(url) abort + let cmd = s:command(a:url, 'text') + ['list-tables'] + let out = db#systemlist(cmd) + return map(out, 'matchstr(v:val, "\\w*$")') +endfunction + diff --git a/doc/dadbod.txt b/doc/dadbod.txt index ec1cb49..fc7fb1a 100644 --- a/doc/dadbod.txt +++ b/doc/dadbod.txt @@ -108,6 +108,20 @@ ClickHouse ~ < Use the `secure` query parameter to enable TLS. + *dadbod-dynamodb* +DynamoDB ~ +> + dynamodb://[@[host:port]] + dynamodb://[] + dynamodb:// +< + +Use @host:port to use on a local dynamodb instance, for real AWS +DynamoDB don't set any host and port. + +Use any AWS credential file accepted by `aws` cli by profile_name +or environment variables before launching vim. + *dadbod-duckdb* DuckDB ~ >