void MergeTreeBaseSelectBlockInputStream::injectVirtualColumns(Block & block) const { /// add virtual columns /// Except _sample_factor, which is added from the outside. if (!virt_column_names.empty()) { const auto rows = block.rows(); for (const auto & virt_column_name : virt_column_names) { if (virt_column_name == "_part") { ColumnPtr column; if (rows) column = DataTypeString().createColumnConst(rows, task->data_part->name)->convertToFullColumnIfConst(); else column = DataTypeString().createColumn(); block.insert({ column, std::make_shared<DataTypeString>(), virt_column_name}); } else if (virt_column_name == "_part_index") { ColumnPtr column; if (rows) column = DataTypeUInt64().createColumnConst(rows, task->part_index_in_query)->convertToFullColumnIfConst(); else column = DataTypeUInt64().createColumn(); block.insert({ column, std::make_shared<DataTypeUInt64>(), virt_column_name}); } else if (virt_column_name == "_partition_id") { ColumnPtr column; if (rows) column = DataTypeString().createColumnConst(rows, task->data_part->info.partition_id)->convertToFullColumnIfConst(); else column = DataTypeString().createColumn(); block.insert({ column, std::make_shared<DataTypeString>(), virt_column_name}); } } } }
csRef<iDataBuffer> csCommonImageFile::GetRawData() const { csRef<iDataBuffer> d; #ifdef THREADED_LOADING if (!loadJob) return d; WaitForJob(); csRef<iImageFileLoader> currentLoader = loadJob->currentLoader; #endif if (currentLoader.IsValid() && (DataTypeString (currentLoader->GetDataType()) != 0)) return currentLoader->GetRawData(); MakeImageData(); return csImageMemory::GetRawData (); }
const char* csCommonImageFile::GetRawFormat() const { #ifdef THREADED_LOADING if (!loadJob) return 0; //WaitForJob(); csRef<iImageFileLoader> currentLoader = loadJob->currentLoader; #endif if (currentLoader.IsValid()) { const char* rawFormat = DataTypeString (currentLoader->GetDataType()); if (rawFormat != 0) return rawFormat; } MakeImageData(); return csImageMemory::GetRawFormat (); }