Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 59 additions & 35 deletions autoload/db_ui/drawer.vim
Original file line number Diff line number Diff line change
Expand Up @@ -407,55 +407,34 @@ endfunction

function! s:drawer.add_db(db) abort
let db_name = a:db.name

if !empty(a:db.conn_error)
let db_name .= ' '.g:db_ui_icons.connection_error
elseif !empty(a:db.conn)
let db_name .= ' '.g:db_ui_icons.connection_ok
endif

if self.show_details
let db_name .= ' ('.a:db.scheme.' - '.a:db.source.')'
endif

call self.add(db_name, 'toggle', 'db', self.get_toggle_icon('db', a:db), a:db.key_name, 0, { 'expanded': a:db.expanded })
if !a:db.expanded
return a:db
endif

call self.add('New query', 'open', 'query', g:db_ui_icons.new_query, a:db.key_name, 1)
if !empty(a:db.buffers.list)
call self.add('Buffers ('.len(a:db.buffers.list).')', 'toggle', 'buffers', self.get_toggle_icon('buffers', a:db.buffers), a:db.key_name, 1, { 'expanded': a:db.buffers.expanded })
if a:db.buffers.expanded
for buf in a:db.buffers.list
let buflabel = self.get_buffer_name(a:db, buf)
if self.dbui.is_tmp_location_buffer(a:db, buf)
let buflabel .= ' *'
endif
call self.add(buflabel, 'open', 'buffer', g:db_ui_icons.buffers, a:db.key_name, 2, { 'file_path': buf })
endfor
" Render sections based on g:db_ui_drawer_sections configuration
for section in g:db_ui_drawer_sections
if section ==# 'new_query'
call self._render_new_query_section(a:db)
elseif section ==# 'buffers' && !empty(a:db.buffers.list)
call self._render_buffers_section(a:db)
elseif section ==# 'saved_queries'
call self._render_saved_queries_section(a:db)
elseif section ==# 'schemas'
call self._render_schemas_section(a:db)
endif
endif
call self.add('Saved queries ('.len(a:db.saved_queries.list).')', 'toggle', 'saved_queries', self.get_toggle_icon('saved_queries', a:db.saved_queries), a:db.key_name, 1, { 'expanded': a:db.saved_queries.expanded })
if a:db.saved_queries.expanded
for saved_query in a:db.saved_queries.list
call self.add(fnamemodify(saved_query, ':t'), 'open', 'buffer', g:db_ui_icons.saved_query, a:db.key_name, 2, { 'file_path': saved_query, 'saved': 1 })
endfor
endif

if a:db.schema_support
call self.add('Schemas ('.len(a:db.schemas.items).')', 'toggle', 'schemas', self.get_toggle_icon('schemas', a:db.schemas), a:db.key_name, 1, { 'expanded': a:db.schemas.expanded })
if a:db.schemas.expanded
for schema in a:db.schemas.list
let schema_item = a:db.schemas.items[schema]
let tables = schema_item.tables
call self.add(schema.' ('.len(tables.items).')', 'toggle', 'schemas->items->'.schema, self.get_toggle_icon('schema', schema_item), a:db.key_name, 2, { 'expanded': schema_item.expanded })
if schema_item.expanded
call self.render_tables(tables, a:db,'schemas->items->'.schema.'->tables->items', 3, schema)
endif
endfor
endif
else
call self.add('Tables ('.len(a:db.tables.items).')', 'toggle', 'tables', self.get_toggle_icon('tables', a:db.tables), a:db.key_name, 1, { 'expanded': a:db.tables.expanded })
call self.render_tables(a:db.tables, a:db, 'tables->items', 2, '')
endif
endfor
endfunction

function! s:drawer.render_tables(tables, db, path, level, schema) abort
Expand Down Expand Up @@ -719,6 +698,51 @@ function! s:drawer.get_buffer_name(db, buffer)
return substitute(name, '^'.db_ui#utils#slug(a:db.name).'-', '', '')
endfunction

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All the code in the new render methods below is copied verbatum from the original if/elseif/endif above.

function! s:drawer._render_new_query_section(db) abort
call self.add('New query', 'open', 'query', g:db_ui_icons.new_query, a:db.key_name, 1)
endfunction

function! s:drawer._render_buffers_section(db) abort
call self.add('Buffers ('.len(a:db.buffers.list).')', 'toggle', 'buffers', self.get_toggle_icon('buffers', a:db.buffers), a:db.key_name, 1, { 'expanded': a:db.buffers.expanded })
if a:db.buffers.expanded
for buf in a:db.buffers.list
let buflabel = self.get_buffer_name(a:db, buf)
if self.dbui.is_tmp_location_buffer(a:db, buf)
let buflabel .= ' *'
endif
call self.add(buflabel, 'open', 'buffer', g:db_ui_icons.buffers, a:db.key_name, 2, { 'file_path': buf })
endfor
endif
endfunction

function! s:drawer._render_saved_queries_section(db) abort
call self.add('Saved queries ('.len(a:db.saved_queries.list).')', 'toggle', 'saved_queries', self.get_toggle_icon('saved_queries', a:db.saved_queries), a:db.key_name, 1, { 'expanded': a:db.saved_queries.expanded })
if a:db.saved_queries.expanded
for saved_query in a:db.saved_queries.list
call self.add(fnamemodify(saved_query, ':t'), 'open', 'buffer', g:db_ui_icons.saved_query, a:db.key_name, 2, { 'file_path': saved_query, 'saved': 1 })
endfor
endif
endfunction

function! s:drawer._render_schemas_section(db) abort
if a:db.schema_support
call self.add('Schemas ('.len(a:db.schemas.items).')', 'toggle', 'schemas', self.get_toggle_icon('schemas', a:db.schemas), a:db.key_name, 1, { 'expanded': a:db.schemas.expanded })
if a:db.schemas.expanded
for schema in a:db.schemas.list
let schema_item = a:db.schemas.items[schema]
let tables = schema_item.tables
call self.add(schema.' ('.len(tables.items).')', 'toggle', 'schemas->items->'.schema, self.get_toggle_icon('schema', schema_item), a:db.key_name, 2, { 'expanded': schema_item.expanded })
if schema_item.expanded
call self.render_tables(tables, a:db,'schemas->items->'.schema.'->tables->items', 3, schema)
endif
endfor
endif
else
call self.add('Tables ('.len(a:db.tables.items).')', 'toggle', 'tables', self.get_toggle_icon('tables', a:db.tables), a:db.key_name, 1, { 'expanded': a:db.tables.expanded })
call self.render_tables(a:db.tables, a:db, 'tables->items', 2, '')
endif
endfunction

function! s:drawer._is_schema_ignored(schema_name)
for ignored_schema in g:db_ui_hide_schemas
if match(a:schema_name, ignored_schema) > -1
Expand Down
13 changes: 13 additions & 0 deletions doc/dadbod-ui.txt
Original file line number Diff line number Diff line change
Expand Up @@ -876,6 +876,19 @@ g:Db_ui_table_name_sorter

Default value: `0`

*g:db_ui_drawer_sections*
g:db_ui_drawer_sections
This value defines which sections appear in the drawer and in
what order. Available sections are: 'new_query', 'buffers',
'saved_queries', and 'schemas'. If not set, all sections
are shown in the default order.

Example to only show schemas/tables and new query:
>
let g:db_ui_drawer_sections = ['schemas', 'new_query']
<
Default value: `['new_query', 'buffers', 'saved_queries', 'schemas']`

*g:db_ui_default_query*
g:db_ui_default_query (DEPRECATED)
This value was intially used as a default value for the table
Expand Down
2 changes: 2 additions & 0 deletions plugin/db_ui.vim
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ let g:db_ui_debug = get(g:, 'db_ui_debug', 0)
let g:db_ui_hide_schemas = get(g:, 'db_ui_hide_schemas', [])
let g:db_ui_bind_param_pattern = get(g: , 'db_ui_bind_param_pattern', ':\w\+')
let g:db_ui_is_oracle_legacy = get(g:, 'db_ui_is_oracle_legacy', 0)
let g:db_ui_drawer_sections = get(g:, 'db_ui_drawer_sections', ['new_query', 'buffers', 'saved_queries', 'schemas'])

let s:dbui_icons = get(g:, 'db_ui_icons', {})
let s:expanded_icon = get(s:dbui_icons, 'expanded', '▾')
let s:collapsed_icon = get(s:dbui_icons, 'collapsed', '▸')
Expand Down
82 changes: 82 additions & 0 deletions test/test-drawer-sections.vim
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
let s:suite = themis#suite('Drawer sections')
let s:expect = themis#helper('expect')

function! s:suite.before() abort
call SetupTestDbs()
endfunction

function! s:suite.after() abort
call Cleanup()
endfunction

function! s:suite.should_show_default_sections() abort
:DBUI
call s:expect(&filetype).to_equal('dbui')
normal o
call s:expect(getline(1, '$')).to_equal([
\ '▾ dadbod_ui_test '.g:db_ui_icons.connection_ok,
\ ' + New query',
\ ' ▸ Saved queries (0)',
\ ' ▸ Tables (2)',
\ '▸ dadbod_ui_testing',
\ ])
normal o
endfunction

function! s:suite.should_show_only_schemas_section() abort
call SetOptionVariable('db_ui_drawer_sections', ['schemas'])
:DBUI
call s:expect(&filetype).to_equal('dbui')
normal o
call s:expect(getline(1, '$')).to_equal([
\ '▾ dadbod_ui_test '.g:db_ui_icons.connection_ok,
\ ' ▸ Tables (2)',
\ '▸ dadbod_ui_testing',
\ ])
normal o
call UnsetOptionVariable('db_ui_drawer_sections')
endfunction

function! s:suite.should_show_only_saved_queries_section() abort
call SetOptionVariable('db_ui_drawer_sections', ['saved_queries'])
:DBUI
call s:expect(&filetype).to_equal('dbui')
normal o
call s:expect(getline(1, '$')).to_equal([
\ '▾ dadbod_ui_test '.g:db_ui_icons.connection_ok,
\ ' ▸ Saved queries (0)',
\ '▸ dadbod_ui_testing',
\ ])
normal o
call UnsetOptionVariable('db_ui_drawer_sections')
endfunction

function! s:suite.should_show_only_new_query_section() abort
call SetOptionVariable('db_ui_drawer_sections', ['new_query'])
:DBUI
call s:expect(&filetype).to_equal('dbui')
normal o
call s:expect(getline(1, '$')).to_equal([
\ '▾ dadbod_ui_test '.g:db_ui_icons.connection_ok,
\ ' + New query',
\ '▸ dadbod_ui_testing',
\ ])
normal o
call UnsetOptionVariable('db_ui_drawer_sections')
endfunction

function! s:suite.should_show_custom_section_order() abort
call SetOptionVariable('db_ui_drawer_sections', ['schemas', 'new_query', 'saved_queries'])
:DBUI
call s:expect(&filetype).to_equal('dbui')
normal o
call s:expect(getline(1, '$')).to_equal([
\ '▾ dadbod_ui_test '.g:db_ui_icons.connection_ok,
\ ' ▸ Tables (2)',
\ ' + New query',
\ ' ▸ Saved queries (0)',
\ '▸ dadbod_ui_testing',
\ ])
normal o
call UnsetOptionVariable('db_ui_drawer_sections')
endfunction
Loading