prepareTimezoneTable
(store memstore.MemStore)
| 450 | |
| 451 | // prepareTimezoneTable |
| 452 | func (qc *AQLQueryContext) prepareTimezoneTable(store memstore.MemStore) { |
| 453 | if qc.timezoneTable.tableColumn == "" { |
| 454 | return |
| 455 | } |
| 456 | |
| 457 | // Timezone table |
| 458 | timezoneTableName := utils.GetConfig().Query.TimezoneTable.TableName |
| 459 | schema, err := store.GetSchema(timezoneTableName) |
| 460 | if err != nil { |
| 461 | qc.Error = err |
| 462 | return |
| 463 | } |
| 464 | if schema == nil { |
| 465 | qc.Error = utils.StackError(nil, "unknown timezone table %s", timezoneTableName) |
| 466 | return |
| 467 | } |
| 468 | |
| 469 | timer := utils.GetRootReporter().GetTimer(utils.TimezoneLookupTableCreationTime) |
| 470 | start := utils.Now() |
| 471 | defer func() { |
| 472 | duration := utils.Now().Sub(start) |
| 473 | timer.Record(duration) |
| 474 | }() |
| 475 | |
| 476 | schema.RLock() |
| 477 | defer schema.RUnlock() |
| 478 | |
| 479 | if tzDict, found := schema.EnumDicts[qc.timezoneTable.tableColumn]; found { |
| 480 | lookUp := make([]int16, len(tzDict.ReverseDict)) |
| 481 | for i := range lookUp { |
| 482 | if loc, err := time.LoadLocation(tzDict.ReverseDict[i]); err == nil { |
| 483 | _, offset := time.Now().In(loc).Zone() |
| 484 | lookUp[i] = int16(offset) |
| 485 | } else { |
| 486 | qc.Error = utils.StackError(err, "error parsing timezone") |
| 487 | return |
| 488 | } |
| 489 | } |
| 490 | sizeInBytes := binary.Size(lookUp) |
| 491 | lookupPtr := deviceAllocate(sizeInBytes, qc.Device) |
| 492 | cgoutils.AsyncCopyHostToDevice(lookupPtr.getPointer(), unsafe.Pointer(&lookUp[0]), sizeInBytes, qc.cudaStreams[0], qc.Device) |
| 493 | qc.OOPK.currentBatch.timezoneLookupD = lookupPtr |
| 494 | qc.OOPK.currentBatch.timezoneLookupDSize = len(lookUp) |
| 495 | } else { |
| 496 | qc.Error = utils.StackError(nil, "unknown timezone column %s", qc.timezoneTable.tableColumn) |
| 497 | return |
| 498 | } |
| 499 | |
| 500 | } |
| 501 | |
| 502 | // transferLiveBatch returns a functor to transfer a live batch to device memory. The size parameter will be either the |
| 503 | // size of the batch or num records in last batch. hostColumns will always be empty since we should not release a vector |
no test coverage detected