Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 69 additions & 30 deletions c_glib/arrow-glib/reader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1484,7 +1484,7 @@ typedef struct GArrowCSVReaderPrivate_ {

enum {
PROP_CSV_TABLE_READER = 1,
PROP_INPUT,
PROP_CSV_READER_INPUT,
};

G_DEFINE_TYPE_WITH_PRIVATE(GArrowCSVReader,
Expand Down Expand Up @@ -1532,7 +1532,7 @@ garrow_csv_reader_set_property(GObject *object,
priv->reader =
*static_cast<std::shared_ptr<arrow::csv::TableReader> *>(g_value_get_pointer(value));
break;
case PROP_INPUT:
case PROP_CSV_READER_INPUT:
priv->input = GARROW_INPUT_STREAM(g_value_dup_object(value));
break;
default:
Expand All @@ -1550,7 +1550,7 @@ garrow_csv_reader_get_property(GObject *object,
auto priv = GARROW_CSV_READER_GET_PRIVATE(object);

switch (prop_id) {
case PROP_INPUT:
case PROP_CSV_READER_INPUT:
g_value_set_object(value, priv->input);
break;
default:
Expand Down Expand Up @@ -1590,7 +1590,9 @@ garrow_csv_reader_class_init(GArrowCSVReaderClass *klass)
GARROW_TYPE_INPUT_STREAM,
static_cast<GParamFlags>(G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property(gobject_class, PROP_INPUT, spec);
g_object_class_install_property(gobject_class,
PROP_CSV_READER_INPUT,
spec);
}

/**
Expand Down Expand Up @@ -1666,11 +1668,11 @@ typedef struct GArrowJSONReadOptionsPrivate_ {
} GArrowJSONReadOptionsPrivate;

enum {
PROP_JSON_READER_USE_THREADS = 1,
PROP_JSON_READER_BLOCK_SIZE,
PROP_JSON_READER_ALLOW_NEWLINES_IN_VALUES,
PROP_JSON_READER_UNEXPECTED_FIELD_BEHAVIOR,
PROP_JSON_READER_SCHEMA
PROP_JSON_READ_OPTIONS_USE_THREADS = 1,
PROP_JSON_READ_OPTIONS_BLOCK_SIZE,
PROP_JSON_READ_OPTIONS_ALLOW_NEWLINES_IN_VALUES,
PROP_JSON_READ_OPTIONS_UNEXPECTED_FIELD_BEHAVIOR,
PROP_JSON_READ_OPTIONS_SCHEMA,
};

G_DEFINE_TYPE_WITH_PRIVATE(GArrowJSONReadOptions,
Expand Down Expand Up @@ -1704,20 +1706,20 @@ garrow_json_read_options_set_property(GObject *object,
auto priv = GARROW_JSON_READ_OPTIONS_GET_PRIVATE(object);

switch (prop_id) {
case PROP_JSON_READER_USE_THREADS:
case PROP_JSON_READ_OPTIONS_USE_THREADS:
priv->read_options.use_threads = g_value_get_boolean(value);
break;
case PROP_JSON_READER_BLOCK_SIZE:
case PROP_JSON_READ_OPTIONS_BLOCK_SIZE:
priv->read_options.block_size = g_value_get_int(value);
break;
case PROP_JSON_READER_ALLOW_NEWLINES_IN_VALUES:
case PROP_JSON_READ_OPTIONS_ALLOW_NEWLINES_IN_VALUES:
priv->parse_options.newlines_in_values = g_value_get_boolean(value);
break;
case PROP_JSON_READER_UNEXPECTED_FIELD_BEHAVIOR:
case PROP_JSON_READ_OPTIONS_UNEXPECTED_FIELD_BEHAVIOR:
priv->parse_options.unexpected_field_behavior =
static_cast<arrow::json::UnexpectedFieldBehavior>(g_value_get_enum(value));
break;
case PROP_JSON_READER_SCHEMA:
case PROP_JSON_READ_OPTIONS_SCHEMA:
{
auto schema = g_value_dup_object(value);
if (priv->schema) {
Expand Down Expand Up @@ -1747,19 +1749,19 @@ garrow_json_read_options_get_property(GObject *object,
auto priv = GARROW_JSON_READ_OPTIONS_GET_PRIVATE(object);

switch (prop_id) {
case PROP_JSON_READER_USE_THREADS:
case PROP_JSON_READ_OPTIONS_USE_THREADS:
g_value_set_boolean(value, priv->read_options.use_threads);
break;
case PROP_JSON_READER_BLOCK_SIZE:
case PROP_JSON_READ_OPTIONS_BLOCK_SIZE:
g_value_set_int(value, priv->read_options.block_size);
break;
case PROP_JSON_READER_ALLOW_NEWLINES_IN_VALUES:
case PROP_JSON_READ_OPTIONS_ALLOW_NEWLINES_IN_VALUES:
g_value_set_boolean(value, priv->parse_options.newlines_in_values);
break;
case PROP_JSON_READER_UNEXPECTED_FIELD_BEHAVIOR:
case PROP_JSON_READ_OPTIONS_UNEXPECTED_FIELD_BEHAVIOR:
g_value_set_enum(value, static_cast<int>(priv->parse_options.unexpected_field_behavior));
break;
case PROP_JSON_READER_SCHEMA:
case PROP_JSON_READ_OPTIONS_SCHEMA:
g_value_set_object(value, priv->schema);
break;
default:
Expand Down Expand Up @@ -1802,7 +1804,7 @@ garrow_json_read_options_class_init(GArrowJSONReadOptionsClass *klass)
read_options.use_threads,
static_cast<GParamFlags>(G_PARAM_READWRITE));
g_object_class_install_property(gobject_class,
PROP_JSON_READER_USE_THREADS,
PROP_JSON_READ_OPTIONS_USE_THREADS,
spec);

/**
Expand All @@ -1823,7 +1825,7 @@ garrow_json_read_options_class_init(GArrowJSONReadOptionsClass *klass)
read_options.block_size,
static_cast<GParamFlags>(G_PARAM_READWRITE));
g_object_class_install_property(gobject_class,
PROP_JSON_READER_BLOCK_SIZE,
PROP_JSON_READ_OPTIONS_BLOCK_SIZE,
spec);


Expand All @@ -1845,7 +1847,7 @@ garrow_json_read_options_class_init(GArrowJSONReadOptionsClass *klass)
parse_options.newlines_in_values,
static_cast<GParamFlags>(G_PARAM_READWRITE));
g_object_class_install_property(gobject_class,
PROP_JSON_READER_ALLOW_NEWLINES_IN_VALUES,
PROP_JSON_READ_OPTIONS_ALLOW_NEWLINES_IN_VALUES,
spec);

/**
Expand All @@ -1862,7 +1864,7 @@ garrow_json_read_options_class_init(GArrowJSONReadOptionsClass *klass)
GARROW_JSON_READ_INFER_TYPE,
static_cast<GParamFlags>(G_PARAM_READWRITE));
g_object_class_install_property(gobject_class,
PROP_JSON_READER_UNEXPECTED_FIELD_BEHAVIOR,
PROP_JSON_READ_OPTIONS_UNEXPECTED_FIELD_BEHAVIOR,
spec);

/**
Expand All @@ -1878,7 +1880,7 @@ garrow_json_read_options_class_init(GArrowJSONReadOptionsClass *klass)
GARROW_TYPE_SCHEMA,
static_cast<GParamFlags>(G_PARAM_READWRITE));
g_object_class_install_property(gobject_class,
PROP_JSON_READER_SCHEMA,
PROP_JSON_READ_OPTIONS_SCHEMA,
spec);
}

Expand All @@ -1899,10 +1901,12 @@ garrow_json_read_options_new(void)

typedef struct GArrowJSONReaderPrivate_ {
std::shared_ptr<arrow::json::TableReader> reader;
GArrowInputStream *input;
} GArrowJSONReaderPrivate;

enum {
PROP_JSON_TABLE_READER = 1
PROP_JSON_TABLE_READER = 1,
PROP_JSON_READER_INPUT,
};

G_DEFINE_TYPE_WITH_PRIVATE(GArrowJSONReader,
Expand All @@ -1919,11 +1923,24 @@ garrow_json_reader_dispose(GObject *object)
{
auto priv = GARROW_JSON_READER_GET_PRIVATE(object);

priv->reader = nullptr;
if (priv->input) {
g_object_unref(priv->input);
priv->input = nullptr;
}

G_OBJECT_CLASS(garrow_json_reader_parent_class)->dispose(object);
}

static void
garrow_json_reader_finalize(GObject *object)
{
auto priv = GARROW_JSON_READER_GET_PRIVATE(object);

priv->reader.~shared_ptr();

G_OBJECT_CLASS(garrow_json_reader_parent_class)->finalize(object);
}

static void
garrow_json_reader_set_property(GObject *object,
guint prop_id,
Expand All @@ -1937,6 +1954,9 @@ garrow_json_reader_set_property(GObject *object,
priv->reader =
*static_cast<std::shared_ptr<arrow::json::TableReader> *>(g_value_get_pointer(value));
break;
case PROP_JSON_READER_INPUT:
priv->input = GARROW_INPUT_STREAM(g_value_dup_object(value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
break;
Expand All @@ -1949,7 +1969,12 @@ garrow_json_reader_get_property(GObject *object,
GValue *value,
GParamSpec *pspec)
{
auto priv = GARROW_JSON_READER_GET_PRIVATE(object);

switch (prop_id) {
case PROP_JSON_READER_INPUT:
g_value_set_object(value, priv->input);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
break;
Expand All @@ -1959,25 +1984,37 @@ garrow_json_reader_get_property(GObject *object,
static void
garrow_json_reader_init(GArrowJSONReader *object)
{
auto priv = GARROW_JSON_READER_GET_PRIVATE(object);
new(&priv->reader) std::shared_ptr<arrow::json::TableReader>;
}

static void
garrow_json_reader_class_init(GArrowJSONReaderClass *klass)
{
GParamSpec *spec;

auto gobject_class = G_OBJECT_CLASS(klass);

gobject_class->dispose = garrow_json_reader_dispose;
gobject_class->finalize = garrow_json_reader_finalize;
gobject_class->set_property = garrow_json_reader_set_property;
gobject_class->get_property = garrow_json_reader_get_property;

GParamSpec *spec;
spec = g_param_spec_pointer("json-table-reader",
"JSON table reader",
"The raw std::shared<arrow::json::TableReader> *",
static_cast<GParamFlags>(G_PARAM_WRITABLE |
G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property(gobject_class, PROP_JSON_TABLE_READER, spec);

spec = g_param_spec_object("input",
"Input",
"The input stream to be read",
GARROW_TYPE_INPUT_STREAM,
static_cast<GParamFlags>(G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property(gobject_class,
PROP_JSON_READER_INPUT,
spec);
}

/**
Expand Down Expand Up @@ -2013,7 +2050,7 @@ garrow_json_reader_new(GArrowInputStream *input,
}

if (garrow::check(error, arrow_reader, "[json-reader][new]")) {
return garrow_json_reader_new_raw(&(arrow_reader.ValueOrDie()));
return garrow_json_reader_new_raw(&*arrow_reader, input);
} else {
return NULL;
}
Expand Down Expand Up @@ -2136,10 +2173,12 @@ garrow_csv_reader_get_raw(GArrowCSVReader *reader)
}

GArrowJSONReader *
garrow_json_reader_new_raw(std::shared_ptr<arrow::json::TableReader> *arrow_reader)
garrow_json_reader_new_raw(std::shared_ptr<arrow::json::TableReader> *arrow_reader,
GArrowInputStream *input)
{
auto reader = GARROW_JSON_READER(g_object_new(GARROW_TYPE_JSON_READER,
"json-table-reader", arrow_reader,
"input", input,
NULL));
return reader;
}
Expand Down
3 changes: 2 additions & 1 deletion c_glib/arrow-glib/reader.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ std::shared_ptr<arrow::csv::TableReader>
garrow_csv_reader_get_raw(GArrowCSVReader *reader);

GArrowJSONReader *
garrow_json_reader_new_raw(std::shared_ptr<arrow::json::TableReader> *arrow_reader);
garrow_json_reader_new_raw(std::shared_ptr<arrow::json::TableReader> *arrow_reader,
GArrowInputStream *input);
std::shared_ptr<arrow::json::TableReader>
garrow_json_reader_get_raw(GArrowJSONReader *reader);