1# Licensed to the Apache Software Foundation (ASF) under one 2# or more contributor license agreements. See the NOTICE file 3# distributed with this work for additional information 4# regarding copyright ownership. The ASF licenses this file 5# to you under the Apache License, Version 2.0 (the 6# "License"); you may not use this file except in compliance 7# with the License. You may obtain a copy of the License at 8# 9# http://www.apache.org/licenses/LICENSE-2.0 10# 11# Unless required by applicable law or agreed to in writing, 12# software distributed under the License is distributed on an 13# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14# KIND, either express or implied. See the License for the 15# specific language governing permissions and limitations 16# under the License. 17 18require "arrow/block-closable" 19 20module Arrow 21 class Loader < GObjectIntrospection::Loader 22 class << self 23 def load 24 super("Arrow", Arrow) 25 end 26 end 27 28 private 29 def post_load(repository, namespace) 30 require_libraries 31 require_extension_library 32 gc_guard 33 end 34 35 def require_libraries 36 require "arrow/column-containable" 37 require "arrow/field-containable" 38 require "arrow/generic-filterable" 39 require "arrow/generic-takeable" 40 require "arrow/record-containable" 41 require "arrow/symbol-values-appendable" 42 43 require "arrow/aggregate-node-options" 44 require "arrow/aggregation" 45 require "arrow/array" 46 require "arrow/array-builder" 47 require "arrow/bigdecimal-extension" 48 require "arrow/binary-dictionary-array-builder" 49 require "arrow/buffer" 50 require "arrow/chunked-array" 51 require "arrow/column" 52 require "arrow/compression-type" 53 require "arrow/csv-loader" 54 require "arrow/csv-read-options" 55 require "arrow/data-type" 56 require "arrow/date32-array" 57 require "arrow/date32-array-builder" 58 require "arrow/date64-array" 59 require "arrow/date64-array-builder" 60 require "arrow/datum" 61 require "arrow/decimal128" 62 require "arrow/decimal128-array" 63 require "arrow/decimal128-array-builder" 64 require "arrow/decimal128-data-type" 65 require "arrow/decimal256" 66 require "arrow/decimal256-array" 67 require "arrow/decimal256-array-builder" 68 require "arrow/decimal256-data-type" 69 require "arrow/dense-union-data-type" 70 require "arrow/dictionary-array" 71 require "arrow/dictionary-data-type" 72 require "arrow/equal-options" 73 require "arrow/expression" 74 require "arrow/field" 75 require "arrow/file-output-stream" 76 require "arrow/file-system" 77 require "arrow/fixed-size-binary-array" 78 require "arrow/fixed-size-binary-array-builder" 79 require "arrow/group" 80 require "arrow/list-array-builder" 81 require "arrow/list-data-type" 82 require "arrow/map-array" 83 require "arrow/map-array-builder" 84 require "arrow/map-data-type" 85 require "arrow/null-array" 86 require "arrow/null-array-builder" 87 require "arrow/path-extension" 88 require "arrow/record" 89 require "arrow/record-batch" 90 require "arrow/record-batch-builder" 91 require "arrow/record-batch-file-reader" 92 require "arrow/record-batch-iterator" 93 require "arrow/record-batch-reader" 94 require "arrow/record-batch-stream-reader" 95 require "arrow/rolling-window" 96 require "arrow/scalar" 97 require "arrow/schema" 98 require "arrow/slicer" 99 require "arrow/sort-key" 100 require "arrow/sort-options" 101 require "arrow/source-node-options" 102 require "arrow/sparse-union-data-type" 103 require "arrow/string-dictionary-array-builder" 104 require "arrow/struct-array" 105 require "arrow/struct-array-builder" 106 require "arrow/struct-data-type" 107 require "arrow/table" 108 require "arrow/table-concatenate-options" 109 require "arrow/table-formatter" 110 require "arrow/table-list-formatter" 111 require "arrow/table-table-formatter" 112 require "arrow/table-loader" 113 require "arrow/table-saver" 114 require "arrow/tensor" 115 require "arrow/time" 116 require "arrow/time32-array" 117 require "arrow/time32-array-builder" 118 require "arrow/time32-data-type" 119 require "arrow/time64-array" 120 require "arrow/time64-array-builder" 121 require "arrow/time64-data-type" 122 require "arrow/timestamp-array" 123 require "arrow/timestamp-array-builder" 124 require "arrow/timestamp-data-type" 125 require "arrow/writable" 126 end 127 128 def require_extension_library 129 require "arrow.so" 130 end 131 132 def gc_guard 133 require "arrow/constructor-arguments-gc-guardable" 134 135 [ 136 @base_module::BinaryScalar, 137 @base_module::Buffer, 138 @base_module::DenseUnionScalar, 139 @base_module::FixedSizeBinaryScalar, 140 @base_module::LargeBinaryScalar, 141 @base_module::LargeListScalar, 142 @base_module::LargeStringScalar, 143 @base_module::ListScalar, 144 @base_module::MapScalar, 145 @base_module::SparseUnionScalar, 146 @base_module::StringScalar, 147 @base_module::StructScalar, 148 ].each do |klass| 149 klass.prepend(ConstructorArgumentsGCGuardable) 150 end 151 end 152 153 def load_object_info(info) 154 super 155 156 klass = @base_module.const_get(rubyish_class_name(info)) 157 if klass.method_defined?(:close) 158 klass.extend(BlockClosable) 159 end 160 end 161 162 def load_method_info(info, klass, method_name) 163 case klass.name 164 when /Array\z/ 165 case method_name 166 when "values" 167 method_name = "values_raw" 168 end 169 end 170 171 case klass.name 172 when /Builder\z/ 173 case method_name 174 when "append" 175 return 176 else 177 super 178 end 179 when "Arrow::StringArray" 180 case method_name 181 when "get_value" 182 method_name = "get_raw_value" 183 when "get_string" 184 method_name = "get_value" 185 end 186 super(info, klass, method_name) 187 when "Arrow::Date32Array", 188 "Arrow::Date64Array", 189 "Arrow::Decimal128Array", 190 "Arrow::Decimal256Array", 191 "Arrow::Time32Array", 192 "Arrow::Time64Array", 193 "Arrow::TimestampArray" 194 case method_name 195 when "get_value" 196 method_name = "get_raw_value" 197 end 198 super(info, klass, method_name) 199 when "Arrow::Decimal128", "Arrow::Decimal256" 200 case method_name 201 when "copy" 202 method_name = "dup" 203 end 204 super(info, klass, method_name) 205 when "Arrow::BooleanScalar" 206 case method_name 207 when "value?" 208 method_name = "value" 209 end 210 super(info, klass, method_name) 211 else 212 super 213 end 214 end 215 end 216end 217