mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2025-05-16 05:15:04 +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}`);
|
||||
}
|
||||
if (this.queryClauses.children.length === 0) {
|
||||
if (queryTableRows === undefined || queryTableRows.length === 0) {
|
||||
return filterString;
|
||||
}
|
||||
filterString = filterString.concat(" WHERE");
|
||||
var first = true;
|
||||
var treeTraversal = (group: ClauseGroup): void => {
|
||||
for (var i = 0; i < group.children.length; i++) {
|
||||
var currentItem = group.children[i];
|
||||
// var treeTraversal = (group: ClauseGroup): void => {
|
||||
for (var i = 0; i < queryTableRows.length; i++) {
|
||||
var currentItem = queryTableRows[i];
|
||||
|
||||
if (currentItem instanceof QueryClauseViewModel) {
|
||||
var clause = <QueryClauseViewModel>currentItem;
|
||||
let timeStampValue: string = this.timestampToSqlValue(clause);
|
||||
var value = clause.value();
|
||||
if (!clause.isValue()) {
|
||||
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);
|
||||
}
|
||||
// if (currentItem instanceof QueryClauseViewModel) {
|
||||
// var clause = <QueryClauseViewModel>currentItem;
|
||||
let timeStampValue: string = this.timestampToSqlValue(currentItem);
|
||||
var value = currentItem.entityValue;
|
||||
if (!currentItem.isValue) {
|
||||
value = timeStampValue;
|
||||
}
|
||||
};
|
||||
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();
|
||||
};
|
||||
|
@ -167,6 +167,10 @@ export default class QueryViewModel {
|
||||
queryTableRows
|
||||
);
|
||||
let filter = this.setFilter(queryTableRows);
|
||||
console.log(
|
||||
"🚀 ~ file: QueryViewModel.tsx ~ line 171 ~ QueryViewModel ~ //constructor ~ userContext.apiType",
|
||||
userContext.apiType
|
||||
);
|
||||
if (filter && userContext.apiType !== "Cassandra") {
|
||||
filter = filter.replace(/"/g, "'");
|
||||
}
|
||||
@ -180,7 +184,9 @@ export default class QueryViewModel {
|
||||
this._tableEntityListViewModel.sqlQuery(this.setSqlFilter(queryTableRows));
|
||||
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);
|
||||
};
|
||||
|
||||
|
@ -64,6 +64,8 @@ export interface IQueryTablesTabComponentStates {
|
||||
entities: Entities.ITableEntity[];
|
||||
headers: string[];
|
||||
isLoading: boolean;
|
||||
queryErrorMessage: string;
|
||||
hasQueryError: boolean;
|
||||
}
|
||||
|
||||
export interface IQueryTableRowsType {
|
||||
|
@ -108,7 +108,12 @@ class QueryTablesTabComponent extends Component<IQueryTablesTabComponentProps, I
|
||||
tableEntityListViewModel,
|
||||
queryViewModel: new QueryViewModel(this.props.queryTablesTab),
|
||||
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,
|
||||
executeQueryButton: {
|
||||
enabled: true,
|
||||
@ -182,6 +187,8 @@ class QueryTablesTabComponent extends Component<IQueryTablesTabComponentProps, I
|
||||
},
|
||||
],
|
||||
isLoading: true,
|
||||
queryErrorMessage: "",
|
||||
hasQueryError: false,
|
||||
};
|
||||
|
||||
this.state.tableEntityListViewModel.queryTablesTab = this.props.queryTablesTab;
|
||||
@ -326,22 +333,33 @@ class QueryTablesTabComponent extends Component<IQueryTablesTabComponentProps, I
|
||||
let headers: string[] = [];
|
||||
//eslint-disable-next-line
|
||||
let documents: any = {};
|
||||
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(
|
||||
this.props.queryTablesTab.collection,
|
||||
query,
|
||||
true
|
||||
);
|
||||
headers = this.getFormattedHeaders(documents.Results);
|
||||
this.setupIntialEntities(documents.Results, headers, isInitialLoad);
|
||||
} else {
|
||||
const { collection } = this.props;
|
||||
documents = await this.getDocuments(collection, selectedQueryText);
|
||||
headers = this.getFormattedHeaders(documents.Results);
|
||||
this.setupIntialEntities(documents.Results, headers, isInitialLoad);
|
||||
try {
|
||||
if (userContext.apiType === "Cassandra") {
|
||||
documents = await this.props.queryTablesTab.container.tableDataClient.queryDocuments(
|
||||
this.props.queryTablesTab.collection,
|
||||
selectedQueryText,
|
||||
true
|
||||
);
|
||||
headers = this.getFormattedHeaders(documents.Results);
|
||||
this.setupIntialEntities(documents.Results, headers, isInitialLoad);
|
||||
} else {
|
||||
const { collection } = this.props;
|
||||
documents = await this.getDocuments(collection, selectedQueryText);
|
||||
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 {
|
||||
// this.state.queryViewModel.hasQueryError()
|
||||
this.setState({
|
||||
isLoading: true,
|
||||
selectedQueryText: this.state.queryViewModel.runQuery(queryTableRows),
|
||||
@ -538,6 +557,10 @@ class QueryTablesTabComponent extends Component<IQueryTablesTabComponentProps, I
|
||||
this.setState({
|
||||
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[] {
|
||||
@ -738,12 +761,14 @@ class QueryTablesTabComponent extends Component<IQueryTablesTabComponentProps, I
|
||||
<div className="tab-pane tableContainer" id={this.props.tabsBaseInstance.tabId} role="tabpanel">
|
||||
<div className="query-builder">
|
||||
<div className="error-bar">
|
||||
{this.state.queryViewModel.hasQueryError() && (
|
||||
{this.state.hasQueryError && (
|
||||
<div className="error-message" aria-label="Error Message">
|
||||
<span>
|
||||
<img className="entity-error-Img" src={ErrorRed} />
|
||||
</span>
|
||||
<span className="error-text" role="alert"></span>
|
||||
<span className="error-text" role="alert">
|
||||
{this.state.queryErrorMessage}
|
||||
</span>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
@ -751,9 +776,7 @@ class QueryTablesTabComponent extends Component<IQueryTablesTabComponentProps, I
|
||||
<div className="query-editor-panel">
|
||||
<div>
|
||||
<textarea
|
||||
className={`query-editor-text ${
|
||||
this.state.queryViewModel.hasQueryError() ? "query-editor-text-invalid" : ""
|
||||
} `}
|
||||
className={`query-editor-text ${this.state.hasQueryError ? "query-editor-text-invalid" : ""} `}
|
||||
value={this.state.queryText}
|
||||
readOnly={true}
|
||||
name="query-editor"
|
||||
|
Loading…
x
Reference in New Issue
Block a user