123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- 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}'`)
- }
- }
- }
|