Files
HardCompound/src/main.c

77 lines
2.0 KiB
C
Raw Normal View History

#include <duckdb.h>
#include <math.h>
2025-12-29 13:46:15 +01:00
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv){
printf("Hello from HardCompound!\n");
if(argc < 2){
printf("You need to specify a duckdb file path! Terminating!\n");
exit(1);
}
2025-12-29 13:46:15 +01:00
printf("First argument: %s\n", argv[1]);
duckdb_database db;
if(duckdb_open(argv[1], &db) == DuckDBError){
2025-12-29 13:46:15 +01:00
printf("Error opening duckdb file, terminating!\n");
exit(2);
}
duckdb_connection conn;
if(duckdb_connect(db, &conn) == DuckDBError){
2025-12-29 13:46:15 +01:00
printf("Error connecting to the duckdb database! Terminating!\n");
exit(3);
}
2025-12-29 13:46:15 +01:00
//Test query
duckdb_result result;
duckdb_query(conn, "SELECT * from \"Ambient Temperature\";\n", &result);
2025-12-29 13:46:15 +01:00
int32_t iterations = 0;
int32_t number_of_data_points = 0;
while(true){
iterations++;
duckdb_data_chunk data_chunk = duckdb_fetch_chunk(result);
if(!data_chunk){
break;
}
idx_t row_count = duckdb_data_chunk_get_size(data_chunk); //number of rows from the data chunk
//first column
duckdb_vector col1 = duckdb_data_chunk_get_vector(data_chunk, 0);
float_t *col1_data = (float_t *) duckdb_vector_get_data(col1);
2025-12-29 13:46:15 +01:00
uint64_t *col1_validity = duckdb_vector_get_validity(col1);
for (idx_t row = 0; row < row_count; row++) {
number_of_data_points++;
if(duckdb_validity_row_is_valid(col1_validity, row)){
printf("%f, ", col1_data[row]);
2025-12-29 13:46:15 +01:00
}else{
printf("NULL");
}
}
duckdb_destroy_data_chunk(&data_chunk);
}
printf("\nNumber of iterations: %d, number of data points: %d\n", iterations, number_of_data_points);
printf("Shutting down HardCompound!\n");
printf("Destroying result!\n");
duckdb_destroy_result(&result);
printf("Closing database and any connection.\n");
duckdb_disconnect(&conn);
duckdb_close(&db);
return 0;
}