/** * Set up a multi-column temp output table for those executors that require one. * Called from p_init. */ void AbstractExecutor::setTempOutputTable(const ExecutorVector& executorVector, const string tempTableName) { TupleSchema* schema = m_abstractNode->generateTupleSchema(); int column_count = schema->columnCount(); std::vector<std::string> column_names(column_count); assert(column_count >= 1); const std::vector<SchemaColumn*>& outputSchema = m_abstractNode->getOutputSchema(); for (int ctr = 0; ctr < column_count; ctr++) { column_names[ctr] = outputSchema[ctr]->getColumnName(); } if (executorVector.isLargeQuery()) { m_tmpOutputTable = TableFactory::buildLargeTempTable(tempTableName, schema, column_names); } else { m_tmpOutputTable = TableFactory::buildTempTable(tempTableName, schema, column_names, executorVector.limits()); } m_abstractNode->setOutputTable(m_tmpOutputTable); }
std::shared_ptr<const Table> ShowColumns::_on_execute() { TableColumnDefinitions column_definitions; column_definitions.emplace_back("column_name", DataType::String); column_definitions.emplace_back("column_type", DataType::String); column_definitions.emplace_back("is_nullable", DataType::Int); auto out_table = std::make_shared<Table>(column_definitions, TableType::Data); const auto table = StorageManager::get().get_table(_table_name); Segments segments; const auto& column_names = table->column_names(); const auto vs_names = std::make_shared<ValueSegment<pmr_string>>( tbb::concurrent_vector<pmr_string>(column_names.begin(), column_names.end())); segments.push_back(vs_names); const auto& column_types = table->column_data_types(); auto column_types_as_string = tbb::concurrent_vector<pmr_string>{}; for (const auto column_type : column_types) { column_types_as_string.push_back(pmr_string{data_type_to_string.left.at(column_type)}); } const auto vs_types = std::make_shared<ValueSegment<pmr_string>>(std::move(column_types_as_string)); segments.push_back(vs_types); const auto& column_nullables = table->columns_are_nullable(); const auto vs_nullables = std::make_shared<ValueSegment<int32_t>>( tbb::concurrent_vector<int32_t>(column_nullables.begin(), column_nullables.end())); segments.push_back(vs_nullables); out_table->append_chunk(segments); return out_table; }
std::vector<std::string> SpatiaLiteDB::geometryTables() { std::vector<std::string> all_tables = table_names(); // find all tables containing a geometry column std::vector<std::string> geometry_tables; for (std::vector<std::string>::iterator table = all_tables.begin(); table != all_tables.end(); table++) { std::vector<std::string> columns = column_names(*table); for (std::vector<std::string>::iterator column = columns.begin(); column != columns.end(); column++) { std::transform(column->begin(), column->end(), column->begin(), (int(*)(int))std::tolower); if (!column->compare("geometry")) { geometry_tables.push_back(*table); } } } return geometry_tables; }
// [[Rcpp::export]] void write_vcf_body_gz( Rcpp::DataFrame fix, Rcpp::DataFrame gt, std::string filename , int mask=0 ) { // http://stackoverflow.com/a/5649224 // fix DataFrame Rcpp::StringVector chrom = fix["CHROM"]; Rcpp::StringVector pos = fix["POS"]; Rcpp::StringVector id = fix["ID"]; Rcpp::StringVector ref = fix["REF"]; Rcpp::StringVector alt = fix["ALT"]; Rcpp::StringVector qual = fix["QUAL"]; Rcpp::StringVector filter = fix["FILTER"]; Rcpp::StringVector info = fix["INFO"]; // gt DataFrame Rcpp::StringMatrix gt_cm = DataFrame_to_StringMatrix(gt); Rcpp::StringVector column_names(gt.size()); column_names = gt.attr("names"); int i = 0; int j = 0; gzFile *fi = (gzFile *)gzopen(filename.c_str(),"ab"); // gzFile *fi = (gzFile *)gzopen(filename.c_str(),"abw"); for(i=0; i<chrom.size(); i++){ Rcpp::checkUserInterrupt(); if(mask == 1 && filter(i) != "PASS" ){ // Don't print variant. } else { std::string tmpstring; tmpstring = chrom(i); tmpstring = tmpstring + "\t" + pos(i) + "\t"; if(id(i) == NA_STRING){ tmpstring = tmpstring + "."; } else { tmpstring = tmpstring + id(i); } tmpstring = tmpstring + "\t" + ref(i) + "\t" + alt(i) + "\t"; if(qual(i) == NA_STRING){ tmpstring = tmpstring + "." + "\t"; } else { tmpstring = tmpstring + qual(i) + "\t"; } if(filter(i) == NA_STRING){ tmpstring = tmpstring + "." + "\t"; } else { tmpstring = tmpstring + filter(i) + "\t"; } tmpstring = tmpstring + info(i); // gt portion for(j=0; j<column_names.size(); j++){ if(gt_cm(i, j) == NA_STRING){ tmpstring = tmpstring + "\t" + "./."; } else { tmpstring = tmpstring + "\t" + gt_cm(i, j); } } // gzwrite(fi,"my decompressed data",strlen("my decompressed data")); // gzwrite(fi,"\n",strlen("\n")); // std::string tmpstring = "test string\n"; gzwrite(fi, (char *)tmpstring.c_str(), tmpstring.size()); gzwrite(fi,"\n",strlen("\n")); } } gzclose(fi); return; }
// [[Rcpp::export]] void write_vcf_body( Rcpp::DataFrame fix, Rcpp::DataFrame gt, std::string filename , int mask=0 ) { //int write_vcf_body( Rcpp::DataFrame fix, Rcpp::DataFrame gt, std::string filename , int mask=0 ) { // fix DataFrame Rcpp::StringVector chrom = fix["CHROM"]; Rcpp::StringVector pos = fix["POS"]; Rcpp::StringVector id = fix["ID"]; Rcpp::StringVector ref = fix["REF"]; Rcpp::StringVector alt = fix["ALT"]; Rcpp::StringVector qual = fix["QUAL"]; Rcpp::StringVector filter = fix["FILTER"]; Rcpp::StringVector info = fix["INFO"]; // gt DataFrame Rcpp::StringMatrix gt_cm = DataFrame_to_StringMatrix(gt); Rcpp::StringVector column_names(gt.size()); column_names = gt.attr("names"); // column_names = gt_cm.attr("col.names"); // delete gt; int i = 0; int j = 0; // Uncompressed. std::ofstream myfile; myfile.open (filename.c_str(), std::ios::out | std::ios::app | std::ios::binary); // gzFile *fi = (gzFile *)gzopen("file.gz","wb"); for(i=0; i<chrom.size(); i++){ Rcpp::checkUserInterrupt(); if(mask == 1 && filter(i) == "PASS" ){ // Don't print variant. } else { myfile << chrom(i); myfile << "\t"; myfile << pos(i); myfile << "\t"; if(id(i) == NA_STRING){ myfile << "."; myfile << "\t"; } else { myfile << id(i); myfile << "\t"; } myfile << ref(i); myfile << "\t"; myfile << alt(i); myfile << "\t"; if(qual(i) == NA_STRING){ myfile << "."; myfile << "\t"; } else { myfile << qual(i); myfile << "\t"; } if(filter(i) == NA_STRING){ myfile << "."; myfile << "\t"; } else { myfile << filter(i); myfile << "\t"; } if(info(i) == NA_STRING){ myfile << "."; myfile << "\t"; } else { myfile << info(i); } // gt region. myfile << "\t"; myfile << gt_cm(i, 0); for(j=1; j<column_names.size(); j++){ myfile << "\t"; myfile << gt_cm(i, j); } myfile << "\n"; } } myfile.close(); return; }
size_t gl_gframe::num_columns() const { return column_names().size(); }