MCPcopy Index your code
hub / github.com/LissaGreense/GO4SQL / selectFromProvidedTable

Method selectFromProvidedTable

engine/engine.go:244–304  ·  view source on GitHub ↗
(command *ast.SelectCommand, table *Table)

Source from the content-addressed store, hash-verified

242}
243
244func (engine *DbEngine) selectFromProvidedTable(command *ast.SelectCommand, table *Table) (*Table, error) {
245 columns := table.Columns
246
247 wantedColumnNames := make([]string, 0)
248 if command.AggregateFunctionAppears() {
249 selectedTable := &Table{Columns: make([]*Column, 0)}
250
251 for i := 0; i < len(command.Space); i++ {
252 var columnType token.Token
253 var columnName string
254 var columnValues []ValueInterface
255 var err error
256 value := make([]ValueInterface, 0)
257 currentSpace := command.Space[i]
258
259 if currentSpace.ColumnName.Type == token.ASTERISK && currentSpace.AggregateFunc.Type == token.COUNT {
260 if len(columns) > 0 {
261 columnValues = columns[0].Values
262 }
263 } else {
264 columnValues, err = getValuesOfColumn(currentSpace.ColumnName.Literal, columns)
265 }
266
267 if err != nil {
268 return nil, err
269 }
270
271 if currentSpace.ContainsAggregateFunc() {
272 columnName = fmt.Sprintf("%s(%s)", currentSpace.AggregateFunc.Literal,
273 currentSpace.ColumnName.Literal)
274 columnType = evaluateColumnTypeOfAggregateFunc(currentSpace)
275 aggregatedValue, aggregateErr := aggregateColumnContent(currentSpace, columnValues)
276 if aggregateErr != nil {
277 return nil, aggregateErr
278 }
279 value = append(value, aggregatedValue)
280 } else {
281 columnName = currentSpace.ColumnName.Literal
282 columnType = currentSpace.ColumnName
283 value = append(value, columnValues[0])
284 }
285
286 selectedTable.Columns = append(selectedTable.Columns, &Column{
287 Name: columnName,
288 Type: columnType,
289 Values: value,
290 })
291 }
292 return selectedTable, nil
293 } else if command.Space[0].ColumnName.Type == token.ASTERISK {
294 for i := 0; i < len(columns); i++ {
295 wantedColumnNames = append(wantedColumnNames, columns[i].Name)
296 }
297 return extractColumnContent(columns, &wantedColumnNames, command.Name.GetToken().Literal)
298 } else {
299 for i := 0; i < len(command.Space); i++ {
300 wantedColumnNames = append(wantedColumnNames, command.Space[i].ColumnName.Literal)
301 }

Calls 8

getValuesOfColumnFunction · 0.85
aggregateColumnContentFunction · 0.85
extractColumnContentFunction · 0.85
uniqueFunction · 0.85
ContainsAggregateFuncMethod · 0.80
GetTokenMethod · 0.65

Tested by

no test coverage detected