Hyper API for C++ 0.0.20746
Hyper client library for C++ applications
Loading...
Searching...
No Matches
update_data_in_existing_hyper_file.cpp

An example of how to update data in an existing Hyper file.

An example of how to update data in an existing Hyper file.

#include <fstream>
#include <iostream>
#include <string>
static void copy(const std::string& sourcePath, const std::string& destinationPath) {
std::ifstream source(sourcePath, std::ios::binary);
std::ofstream destination(destinationPath, std::ios::binary);
destination << source.rdbuf();
source.close();
destination.close();
}
static void runUpdateDataInExistingHyperFile() {
std::cout << "EXAMPLE - Update existing data in a Hyper file" << std::endl;
// Path to a Hyper file containing all data inserted into Customer, Product, Orders and LineItems table
// See "insert_data_into_multiple_tables.cpp" for an example that works with the complete schema.
const std::string pathToSourceDatabase = "data/superstore_sample.hyper";
// Make a copy of the superstore example Hyper file.
const std::string pathToDatabase = "data/superstore_sample_update.hyper";
copy(pathToSourceDatabase, pathToDatabase);
// Starts the Hyper Process with telemetry enabled to send data to Tableau.
// To opt out, simply set telemetry=hyperapi::Telemetry::DoNotSendUsageDataToTableau.
{
// Connect to existing Hyper file "superstore_sample_update.hyper".
{
hyperapi::Connection connection(hyper.getEndpoint(), pathToDatabase);
hyperapi::Result rowsPreUpdate = connection.executeQuery(
"SELECT " + hyperapi::escapeName("Loyalty Reward Points") + ", " + hyperapi::escapeName("Segment") + " FROM " + hyperapi::escapeName("Customer"));
std::cout << "Pre-Update: Individual rows showing 'Loyalty Reward Points' and 'Segment' columns: " << std::endl;
for (const hyperapi::Row& row : rowsPreUpdate) {
for (const hyperapi::Value& value : row) {
std::cout << value << '\t';
}
std::cout << '\n';
}
std::cout << std::endl;
std::cout << "Update 'Customers' table by adding 50 Loyalty Reward Points to all Corporate Customers." << std::endl;
int64_t rowCount = connection.executeCommand(
"UPDATE " + hyperapi::escapeName("Customer") + " SET " + hyperapi::escapeName("Loyalty Reward Points") + " = " +
hyperapi::escapeName("Loyalty Reward Points") + " + 50 " + "WHERE " + hyperapi::escapeName("Segment") + " = " +
std::cout << "The number of updated rows in table " << hyperapi::escapeName("Customer") << " is " << rowCount << "." << std::endl;
hyperapi::Result rowsPostUpdate = connection.executeQuery(
"SELECT " + hyperapi::escapeName("Loyalty Reward Points") + ", " + hyperapi::escapeName("Segment") + " FROM " + hyperapi::escapeName("Customer"));
for (const hyperapi::Row& row : rowsPostUpdate) {
for (const hyperapi::Value& value : row) {
std::cout << value << '\t';
}
std::cout << '\n';
}
}
std::cout << "The connection to the Hyper file has been closed." << std::endl;
}
std::cout << "The Hyper Process has been shut down." << std::endl;
}
int main() {
try {
runUpdateDataInExistingHyperFile();
} catch (const hyperapi::HyperException& e) {
std::cout << e.toString() << std::endl;
return 1;
}
return 0;
}
Defines a Hyper connection.
Defines an exception object that is thrown on failure by the functions in the Hyper API C++ library.
std::string toString() const
Returns a formatted string containing the message and hint of the error and all causes.
Defines a Hyper process.
Base class for a result of a query.
Definition Result.hpp:326
A Row inside a chunk.
Definition Result.hpp:210
A value inside a row.
Definition Result.hpp:44
The main header of the Hyper API for C++.
@ SendUsageDataToTableau
Telemetry data will be sent to tableau to help improve the Hyper API.
std::string escapeName(string_view input)
Escapes the given string for safe usage in SQL query or command strings as an identifier.
std::string escapeStringLiteral(string_view input)
Escapes the given string for safe usage in SQL query or command strings as a string literal.