import { dataType } from './configs' export function trimColType(str) { let colType if (str.indexOf('(') >= 0) { colType = dataType.find(type => type.name === str.split('(')[0]) } else { colType = dataType.find(type => type.name === str) } return colType } export function buildSqlSentence({ dataSrc, selectedCalcul, selectedCalcul2, selectedDimension, orderByStrs, filterStr, limit }) { let fields = [] const groups = [] let groupBy let orderBy let where let allSelected = [] // allSelected = allSelected.concat(selectedCalcul).concat(selectedDimension) // fields = allSelected.map(field => { // const calculField = selectedCalcul.find(col => col.Column === field.Column) // if (calculField && calculField.calculFunc !== 'none') { // return `${calculField.calculFunc || trimColType(calculField.Type).availableFunc[0]}(${calculField.Column}) as ${calculField.Column}` // } else { // groups.push(field.Column) // return field.Column // } // }) allSelected = allSelected.concat(selectedCalcul).concat(selectedCalcul2).concat(selectedDimension) fields = allSelected.map(field => { const calculField = selectedCalcul.find(col => col.Column === field.Column) const calculField2 = selectedCalcul2.find(col => col.Column === field.Column) if (calculField && calculField.calculFunc !== 'none') { return `${calculField.calculFunc || trimColType(calculField.Type).availableFunc[0]}(${calculField.Column}) as ${calculField.Column}` } else if (calculField2 && calculField2.calculFunc !== 'none') { return `${calculField2.calculFunc || trimColType(calculField2.Type).availableFunc[0]}(${calculField2.Column}) as ${calculField2.Column}` } else { groups.push(field.Column) return field.Column } }) if (fields.length === 0 || !dataSrc) return if (groups.length > 0) { groupBy = `GROUP BY ${groups.join()}` } if (orderByStrs.length > 0) { orderBy = `ORDER BY ${orderByStrs.join()}` } if (filterStr) { where = `where ${filterStr}` } return `SELECT ${fields.join()} FROM ${dataSrc} ${where || ''} ${groupBy || ''} ${orderBy || ''} LIMIT ${limit || 200}` } export function buildFilterSentence(filter) { let filterSentence let valueObj = filter.value if (trimColType(filter.colType).needQuotation) { valueObj = addQuotation(filter.value) } if (filter.operatorParamNum === 1) { filterSentence = `${filter.filteCol} ${filter.filterOperator} ${valueObj.value1}` } else if (filter.operatorParamNum === 2) { filterSentence = `${filter.filteCol} ${filter.filterOperator} ${valueObj.value1} and ${valueObj.value2}` } else { filterSentence = `${filter.filteCol} ${filter.filterOperator} ('${valueObj.arrValue.join(',')}')` } return filterSentence function addQuotation(valueObj) { return { value1: `'${valueObj.value1}'`, value2: `'${valueObj.value2}'`, arrValue: valueObj.arrValue.map(value => `'${value}'`) } } }