mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2025-05-16 13:25:06 +01:00
Implemented changes to Cassandra filter
This commit is contained in:
parent
c681c14be1
commit
1931e775d9
@ -257,43 +257,43 @@ export default class QueryBuilderViewModel {
|
|||||||
});
|
});
|
||||||
filterString = filterString.concat(` FROM ${tableToQuery}`);
|
filterString = filterString.concat(` FROM ${tableToQuery}`);
|
||||||
}
|
}
|
||||||
if (this.queryClauses.children.length === 0) {
|
if (queryTableRows === undefined || queryTableRows.length === 0) {
|
||||||
return filterString;
|
return filterString;
|
||||||
}
|
}
|
||||||
filterString = filterString.concat(" WHERE");
|
filterString = filterString.concat(" WHERE");
|
||||||
var first = true;
|
var first = true;
|
||||||
var treeTraversal = (group: ClauseGroup): void => {
|
// var treeTraversal = (group: ClauseGroup): void => {
|
||||||
for (var i = 0; i < group.children.length; i++) {
|
for (var i = 0; i < queryTableRows.length; i++) {
|
||||||
var currentItem = group.children[i];
|
var currentItem = queryTableRows[i];
|
||||||
|
|
||||||
if (currentItem instanceof QueryClauseViewModel) {
|
// if (currentItem instanceof QueryClauseViewModel) {
|
||||||
var clause = <QueryClauseViewModel>currentItem;
|
// var clause = <QueryClauseViewModel>currentItem;
|
||||||
let timeStampValue: string = this.timestampToSqlValue(clause);
|
let timeStampValue: string = this.timestampToSqlValue(currentItem);
|
||||||
var value = clause.value();
|
var value = currentItem.entityValue;
|
||||||
if (!clause.isValue()) {
|
if (!currentItem.isValue) {
|
||||||
value = timeStampValue;
|
value = timeStampValue;
|
||||||
}
|
|
||||||
filterString = filterString.concat(
|
|
||||||
this.constructCqlClause(
|
|
||||||
first ? "" : clause.and_or(),
|
|
||||||
this.generateLeftParentheses(clause),
|
|
||||||
clause.field(),
|
|
||||||
clause.type(),
|
|
||||||
clause.operator(),
|
|
||||||
value,
|
|
||||||
this.generateRightParentheses(clause)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
first = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (currentItem instanceof ClauseGroup) {
|
|
||||||
treeTraversal(<ClauseGroup>currentItem);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
filterString = filterString.concat(
|
||||||
|
this.constructCqlClause(
|
||||||
|
first ? "" : currentItem.selectedOperation,
|
||||||
|
this.generateLeftParentheses(currentItem),
|
||||||
|
currentItem.selectedField,
|
||||||
|
currentItem.selectedEntityType,
|
||||||
|
currentItem.selectedOperator,
|
||||||
|
value,
|
||||||
|
this.generateRightParentheses(currentItem)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
first = false;
|
||||||
|
// }
|
||||||
|
|
||||||
treeTraversal(this.queryClauses);
|
if (currentItem instanceof ClauseGroup) {
|
||||||
|
// treeTraversal(<ClauseGroup>currentItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// };
|
||||||
|
|
||||||
|
// treeTraversal(this.queryClauses);
|
||||||
|
|
||||||
return filterString.trim();
|
return filterString.trim();
|
||||||
};
|
};
|
||||||
|
@ -167,6 +167,10 @@ export default class QueryViewModel {
|
|||||||
queryTableRows
|
queryTableRows
|
||||||
);
|
);
|
||||||
let filter = this.setFilter(queryTableRows);
|
let filter = this.setFilter(queryTableRows);
|
||||||
|
console.log(
|
||||||
|
"🚀 ~ file: QueryViewModel.tsx ~ line 171 ~ QueryViewModel ~ //constructor ~ userContext.apiType",
|
||||||
|
userContext.apiType
|
||||||
|
);
|
||||||
if (filter && userContext.apiType !== "Cassandra") {
|
if (filter && userContext.apiType !== "Cassandra") {
|
||||||
filter = filter.replace(/"/g, "'");
|
filter = filter.replace(/"/g, "'");
|
||||||
}
|
}
|
||||||
@ -180,7 +184,9 @@ export default class QueryViewModel {
|
|||||||
this._tableEntityListViewModel.sqlQuery(this.setSqlFilter(queryTableRows));
|
this._tableEntityListViewModel.sqlQuery(this.setSqlFilter(queryTableRows));
|
||||||
this._tableEntityListViewModel.cqlQuery(filter);
|
this._tableEntityListViewModel.cqlQuery(filter);
|
||||||
|
|
||||||
return this._tableEntityListViewModel.sqlQuery();
|
return userContext.apiType !== "Cassandra"
|
||||||
|
? this._tableEntityListViewModel.sqlQuery()
|
||||||
|
: this._tableEntityListViewModel.cqlQuery();
|
||||||
// return this._tableEntityListViewModel.reloadTable(/*useSetting*/ false, /*resetHeaders*/ false);
|
// return this._tableEntityListViewModel.reloadTable(/*useSetting*/ false, /*resetHeaders*/ false);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -64,6 +64,8 @@ export interface IQueryTablesTabComponentStates {
|
|||||||
entities: Entities.ITableEntity[];
|
entities: Entities.ITableEntity[];
|
||||||
headers: string[];
|
headers: string[];
|
||||||
isLoading: boolean;
|
isLoading: boolean;
|
||||||
|
queryErrorMessage: string;
|
||||||
|
hasQueryError: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IQueryTableRowsType {
|
export interface IQueryTableRowsType {
|
||||||
|
@ -108,7 +108,12 @@ class QueryTablesTabComponent extends Component<IQueryTablesTabComponentProps, I
|
|||||||
tableEntityListViewModel,
|
tableEntityListViewModel,
|
||||||
queryViewModel: new QueryViewModel(this.props.queryTablesTab),
|
queryViewModel: new QueryViewModel(this.props.queryTablesTab),
|
||||||
queryText: "PartitionKey eq 'partionKey1'",
|
queryText: "PartitionKey eq 'partionKey1'",
|
||||||
selectedQueryText: "Select * from c",
|
selectedQueryText:
|
||||||
|
userContext.apiType === "Cassandra"
|
||||||
|
? `SELECT * FROM ${getQuotedCqlIdentifier(
|
||||||
|
this.props.queryTablesTab.collection.databaseId
|
||||||
|
)}.${getQuotedCqlIdentifier(this.props.queryTablesTab.collection.id())}`
|
||||||
|
: "Select * from c",
|
||||||
isHelperActive: true,
|
isHelperActive: true,
|
||||||
executeQueryButton: {
|
executeQueryButton: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
@ -182,6 +187,8 @@ class QueryTablesTabComponent extends Component<IQueryTablesTabComponentProps, I
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
isLoading: true,
|
isLoading: true,
|
||||||
|
queryErrorMessage: "",
|
||||||
|
hasQueryError: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
this.state.tableEntityListViewModel.queryTablesTab = this.props.queryTablesTab;
|
this.state.tableEntityListViewModel.queryTablesTab = this.props.queryTablesTab;
|
||||||
@ -326,22 +333,33 @@ class QueryTablesTabComponent extends Component<IQueryTablesTabComponentProps, I
|
|||||||
let headers: string[] = [];
|
let headers: string[] = [];
|
||||||
//eslint-disable-next-line
|
//eslint-disable-next-line
|
||||||
let documents: any = {};
|
let documents: any = {};
|
||||||
if (userContext.apiType === "Cassandra") {
|
try {
|
||||||
const query = `SELECT * FROM ${getQuotedCqlIdentifier(
|
if (userContext.apiType === "Cassandra") {
|
||||||
this.props.queryTablesTab.collection.databaseId
|
documents = await this.props.queryTablesTab.container.tableDataClient.queryDocuments(
|
||||||
)}.${getQuotedCqlIdentifier(this.props.queryTablesTab.collection.id())}`;
|
this.props.queryTablesTab.collection,
|
||||||
documents = await this.props.queryTablesTab.container.tableDataClient.queryDocuments(
|
selectedQueryText,
|
||||||
this.props.queryTablesTab.collection,
|
true
|
||||||
query,
|
);
|
||||||
true
|
headers = this.getFormattedHeaders(documents.Results);
|
||||||
);
|
this.setupIntialEntities(documents.Results, headers, isInitialLoad);
|
||||||
headers = this.getFormattedHeaders(documents.Results);
|
} else {
|
||||||
this.setupIntialEntities(documents.Results, headers, isInitialLoad);
|
const { collection } = this.props;
|
||||||
} else {
|
documents = await this.getDocuments(collection, selectedQueryText);
|
||||||
const { collection } = this.props;
|
headers = this.getFormattedHeaders(documents.Results);
|
||||||
documents = await this.getDocuments(collection, selectedQueryText);
|
this.setupIntialEntities(documents.Results, headers, isInitialLoad);
|
||||||
headers = this.getFormattedHeaders(documents.Results);
|
}
|
||||||
this.setupIntialEntities(documents.Results, headers, isInitialLoad);
|
this.setState({
|
||||||
|
queryErrorMessage: "",
|
||||||
|
hasQueryError: false,
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
if (error.responseText) {
|
||||||
|
this.setState({
|
||||||
|
queryErrorMessage: error.responseText,
|
||||||
|
hasQueryError: true,
|
||||||
|
isLoading: false,
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -528,6 +546,7 @@ class QueryTablesTabComponent extends Component<IQueryTablesTabComponentProps, I
|
|||||||
};
|
};
|
||||||
|
|
||||||
public runQuery(queryTableRows: IQueryTableRowsType[]): void {
|
public runQuery(queryTableRows: IQueryTableRowsType[]): void {
|
||||||
|
// this.state.queryViewModel.hasQueryError()
|
||||||
this.setState({
|
this.setState({
|
||||||
isLoading: true,
|
isLoading: true,
|
||||||
selectedQueryText: this.state.queryViewModel.runQuery(queryTableRows),
|
selectedQueryText: this.state.queryViewModel.runQuery(queryTableRows),
|
||||||
@ -538,6 +557,10 @@ class QueryTablesTabComponent extends Component<IQueryTablesTabComponentProps, I
|
|||||||
this.setState({
|
this.setState({
|
||||||
queryText: this.state.queryViewModel.queryText(),
|
queryText: this.state.queryViewModel.queryText(),
|
||||||
});
|
});
|
||||||
|
console.log(
|
||||||
|
"🚀 ~ file: QueryTablesTabComponent.tsx ~ line 542 ~ QueryTablesTabComponent ~ runQuery ~ this.state.queryViewModel.hasQueryError()",
|
||||||
|
this.state.queryViewModel.hasQueryError()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected getTabsButtons(): CommandButtonComponentProps[] {
|
protected getTabsButtons(): CommandButtonComponentProps[] {
|
||||||
@ -738,12 +761,14 @@ class QueryTablesTabComponent extends Component<IQueryTablesTabComponentProps, I
|
|||||||
<div className="tab-pane tableContainer" id={this.props.tabsBaseInstance.tabId} role="tabpanel">
|
<div className="tab-pane tableContainer" id={this.props.tabsBaseInstance.tabId} role="tabpanel">
|
||||||
<div className="query-builder">
|
<div className="query-builder">
|
||||||
<div className="error-bar">
|
<div className="error-bar">
|
||||||
{this.state.queryViewModel.hasQueryError() && (
|
{this.state.hasQueryError && (
|
||||||
<div className="error-message" aria-label="Error Message">
|
<div className="error-message" aria-label="Error Message">
|
||||||
<span>
|
<span>
|
||||||
<img className="entity-error-Img" src={ErrorRed} />
|
<img className="entity-error-Img" src={ErrorRed} />
|
||||||
</span>
|
</span>
|
||||||
<span className="error-text" role="alert"></span>
|
<span className="error-text" role="alert">
|
||||||
|
{this.state.queryErrorMessage}
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
@ -751,9 +776,7 @@ class QueryTablesTabComponent extends Component<IQueryTablesTabComponentProps, I
|
|||||||
<div className="query-editor-panel">
|
<div className="query-editor-panel">
|
||||||
<div>
|
<div>
|
||||||
<textarea
|
<textarea
|
||||||
className={`query-editor-text ${
|
className={`query-editor-text ${this.state.hasQueryError ? "query-editor-text-invalid" : ""} `}
|
||||||
this.state.queryViewModel.hasQueryError() ? "query-editor-text-invalid" : ""
|
|
||||||
} `}
|
|
||||||
value={this.state.queryText}
|
value={this.state.queryText}
|
||||||
readOnly={true}
|
readOnly={true}
|
||||||
name="query-editor"
|
name="query-editor"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user