Skip to content

Commit

Permalink
Adding indexes to table metadata (#1160)
Browse files Browse the repository at this point in the history
  • Loading branch information
mistercrunch authored Sep 21, 2016
1 parent 5a0e06e commit f1e80a8
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -102,22 +102,27 @@ class SqlEditorTopToolbar extends React.Component {
const tableName = tableOpt.value;
const qe = this.props.queryEditor;
const url = `/caravel/table/${qe.dbId}/${tableName}/${qe.schema}/`;

this.setState({ tableLoading: true });
$.get(url, (data) => {
this.props.actions.addTable({
id: shortid.generate(),
dbId: this.props.queryEditor.dbId,
queryEditorId: this.props.queryEditor.id,
name: data.name,
indexes: data.indexes,
schema: qe.schema,
columns: data.columns,
expanded: true,
});
this.setState({ tableLoading: false });
})
.fail(() => {
this.props.actions.addAlert({
msg: 'Error occurred while fetching metadata',
bsStyle: 'danger',
});
this.setState({ tableLoading: false });
});
}
render() {
Expand Down
23 changes: 23 additions & 0 deletions caravel/assets/javascripts/SqlLab/components/TableElement.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import * as Actions from '../actions';
import shortid from 'shortid';
import ModalTrigger from '../../components/ModalTrigger.jsx';

class TableElement extends React.Component {
setSelectStar() {
Expand Down Expand Up @@ -86,6 +87,27 @@ class TableElement extends React.Component {
</a>
);
}
let keyLink;
if (this.props.table.indexes && this.props.table.indexes.length > 0) {
keyLink = (
<ModalTrigger
modalTitle={
<div>
Keys for table <strong>{this.props.table.name}</strong>
</div>
}
modalBody={
<pre>{JSON.stringify(this.props.table.indexes, null, 4)}</pre>
}
triggerNode={
<Link
className="fa fa-key pull-left m-l-2"
tooltip={`View indexes (${this.props.table.indexes.length})`}
/>
}
/>
);
}
return (
<div>
<div className="clearfix">
Expand All @@ -94,6 +116,7 @@ class TableElement extends React.Component {
</div>
<div className="pull-right">
<ButtonGroup className="ws-el-controls pull-right">
{keyLink}
<Link
className="fa fa-pencil pull-left m-l-2"
onClick={this.setSelectStar.bind(this)}
Expand Down
3 changes: 3 additions & 0 deletions caravel/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -633,6 +633,9 @@ def get_table(self, table_name, schema=None):
def get_columns(self, table_name, schema=None):
return self.inspector.get_columns(table_name, schema)

def get_indexes(self, table_name, schema=None):
return self.inspector.get_indexes(table_name, schema)

@property
def sqlalchemy_uri_decrypted(self):
conn = sqla.engine.url.make_url(self.sqlalchemy_uri)
Expand Down
3 changes: 3 additions & 0 deletions caravel/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -1527,9 +1527,11 @@ def table(self, database_id, table_name, schema):
schema = None if schema in ('null', 'undefined') else schema
mydb = db.session.query(models.Database).filter_by(id=database_id).one()
cols = []
indexes = []
t = mydb.get_columns(table_name, schema)
try:
t = mydb.get_columns(table_name, schema)
indexes = mydb.get_indexes(table_name, schema)
except Exception as e:
return Response(
json.dumps({'error': utils.error_msg_from_exception(e)}),
Expand All @@ -1548,6 +1550,7 @@ def table(self, database_id, table_name, schema):
tbl = {
'name': table_name,
'columns': cols,
'indexes': indexes,
}
return Response(json.dumps(tbl), mimetype="application/json")

Expand Down

0 comments on commit f1e80a8

Please sign in to comment.