Implemented changes to Cassandra filter

This commit is contained in:
vaidankarswapnil 2021-08-09 14:22:35 +05:30
parent c681c14be1
commit 1931e775d9
4 changed files with 84 additions and 53 deletions

View File

@ -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( filterString = filterString.concat(
this.constructCqlClause( this.constructCqlClause(
first ? "" : clause.and_or(), first ? "" : currentItem.selectedOperation,
this.generateLeftParentheses(clause), this.generateLeftParentheses(currentItem),
clause.field(), currentItem.selectedField,
clause.type(), currentItem.selectedEntityType,
clause.operator(), currentItem.selectedOperator,
value, value,
this.generateRightParentheses(clause) this.generateRightParentheses(currentItem)
) )
); );
first = false; first = false;
} // }
if (currentItem instanceof ClauseGroup) { if (currentItem instanceof ClauseGroup) {
treeTraversal(<ClauseGroup>currentItem); // treeTraversal(<ClauseGroup>currentItem);
} }
} }
}; // };
treeTraversal(this.queryClauses); // treeTraversal(this.queryClauses);
return filterString.trim(); return filterString.trim();
}; };

View File

@ -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);
}; };

View File

@ -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 {

View File

@ -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,13 +333,11 @@ 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 = {};
try {
if (userContext.apiType === "Cassandra") { if (userContext.apiType === "Cassandra") {
const query = `SELECT * FROM ${getQuotedCqlIdentifier(
this.props.queryTablesTab.collection.databaseId
)}.${getQuotedCqlIdentifier(this.props.queryTablesTab.collection.id())}`;
documents = await this.props.queryTablesTab.container.tableDataClient.queryDocuments( documents = await this.props.queryTablesTab.container.tableDataClient.queryDocuments(
this.props.queryTablesTab.collection, this.props.queryTablesTab.collection,
query, selectedQueryText,
true true
); );
headers = this.getFormattedHeaders(documents.Results); headers = this.getFormattedHeaders(documents.Results);
@ -343,6 +348,19 @@ class QueryTablesTabComponent extends Component<IQueryTablesTabComponentProps, I
headers = this.getFormattedHeaders(documents.Results); headers = this.getFormattedHeaders(documents.Results);
this.setupIntialEntities(documents.Results, headers, isInitialLoad); 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,
});
}
}
} }
private setupIntialEntities = ( private setupIntialEntities = (
@ -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"