@@ -45,8 +45,6 @@ namespace ipc {
4545using RjArray = rj::Value::ConstArray;
4646using RjObject = rj::Value::ConstObject;
4747
48- enum class BufferType : char { DATA, OFFSET, TYPE, VALIDITY };
49-
5048static std::string GetBufferTypeName (BufferType type) {
5149 switch (type) {
5250 case BufferType::DATA:
@@ -93,27 +91,6 @@ static std::string GetTimeUnitName(TimeUnit unit) {
9391 return " UNKNOWN" ;
9492}
9593
96- class BufferLayout {
97- public:
98- BufferLayout (BufferType type, int bit_width) : type_(type), bit_width_(bit_width) {}
99-
100- BufferType type () const { return type_; }
101- int bit_width () const { return bit_width_; }
102-
103- private:
104- BufferType type_;
105- int bit_width_;
106- };
107-
108- static const BufferLayout kValidityBuffer (BufferType::VALIDITY, 1 );
109- static const BufferLayout kOffsetBuffer (BufferType::OFFSET, 32 );
110- static const BufferLayout kTypeBuffer (BufferType::TYPE, 32 );
111- static const BufferLayout kBooleanBuffer (BufferType::DATA, 1 );
112- static const BufferLayout kValues64 (BufferType::DATA, 64 );
113- static const BufferLayout kValues32 (BufferType::DATA, 32 );
114- static const BufferLayout kValues16 (BufferType::DATA, 16 );
115- static const BufferLayout kValues8 (BufferType::DATA, 8 );
116-
11794class JsonSchemaWriter : public TypeVisitor {
11895 public:
11996 explicit JsonSchemaWriter (const Schema& schema, RjWriter* writer)
@@ -154,9 +131,9 @@ class JsonSchemaWriter : public TypeVisitor {
154131 }
155132
156133 template <typename T>
157- typename std::enable_if<std::is_base_of<NoExtraMeta, T>::value ||
158- std::is_base_of<BooleanType, T>::value ||
159- std::is_base_of<NullType, T>::value,
134+ typename std::enable_if<
135+ std::is_base_of<NoExtraMeta, T>::value || std::is_base_of<BooleanType, T>::value ||
136+ std::is_base_of<DateType, T>::value || std::is_base_of<NullType, T>::value,
160137 void >::type
161138 WriteTypeMetadata (const T& type) {}
162139
@@ -243,29 +220,28 @@ class JsonSchemaWriter : public TypeVisitor {
243220 }
244221
245222 template <typename T>
246- Status WritePrimitive (const std::string& typeclass, const T& type,
247- const std::vector<BufferLayout>& buffer_layout) {
223+ Status WritePrimitive (const std::string& typeclass, const T& type) {
248224 WriteName (typeclass, type);
249225 SetNoChildren ();
250- WriteBufferLayout (buffer_layout );
226+ WriteBufferLayout (type. GetBufferLayout () );
251227 return Status::OK ();
252228 }
253229
254230 template <typename T>
255231 Status WriteVarBytes (const std::string& typeclass, const T& type) {
256232 WriteName (typeclass, type);
257233 SetNoChildren ();
258- WriteBufferLayout ({ kValidityBuffer , kOffsetBuffer , kValues8 } );
234+ WriteBufferLayout (type. GetBufferLayout () );
259235 return Status::OK ();
260236 }
261237
262- void WriteBufferLayout (const std::vector<BufferLayout >& buffer_layout) {
238+ void WriteBufferLayout (const std::vector<BufferDescr >& buffer_layout) {
263239 writer_->Key (" typeLayout" );
264240 writer_->StartObject ();
265241 writer_->Key (" vectors" );
266242 writer_->StartArray ();
267243
268- for (const BufferLayout & buffer : buffer_layout) {
244+ for (const BufferDescr & buffer : buffer_layout) {
269245 writer_->StartObject ();
270246 writer_->Key (" type" );
271247 writer_->String (GetBufferTypeName (buffer.type ()));
@@ -289,101 +265,74 @@ class JsonSchemaWriter : public TypeVisitor {
289265 return Status::OK ();
290266 }
291267
292- Status Visit (const NullType& type) override { return WritePrimitive (" null" , type, {} ); }
268+ Status Visit (const NullType& type) override { return WritePrimitive (" null" , type); }
293269
294- Status Visit (const BooleanType& type) override {
295- return WritePrimitive (" bool" , type, {kValidityBuffer , kBooleanBuffer });
296- }
270+ Status Visit (const BooleanType& type) override { return WritePrimitive (" bool" , type); }
297271
298- Status Visit (const Int8Type& type) override {
299- return WritePrimitive (" int" , type, {kValidityBuffer , kValues8 });
300- }
272+ Status Visit (const Int8Type& type) override { return WritePrimitive (" int" , type); }
301273
302- Status Visit (const Int16Type& type) override {
303- return WritePrimitive (" int" , type, {kValidityBuffer , kValues16 });
304- }
274+ Status Visit (const Int16Type& type) override { return WritePrimitive (" int" , type); }
305275
306- Status Visit (const Int32Type& type) override {
307- return WritePrimitive (" int" , type, {kValidityBuffer , kValues32 });
308- }
276+ Status Visit (const Int32Type& type) override { return WritePrimitive (" int" , type); }
309277
310- Status Visit (const Int64Type& type) override {
311- return WritePrimitive (" int" , type, {kValidityBuffer , kValues64 });
312- }
278+ Status Visit (const Int64Type& type) override { return WritePrimitive (" int" , type); }
313279
314- Status Visit (const UInt8Type& type) override {
315- return WritePrimitive (" int" , type, {kValidityBuffer , kValues8 });
316- }
280+ Status Visit (const UInt8Type& type) override { return WritePrimitive (" int" , type); }
317281
318- Status Visit (const UInt16Type& type) override {
319- return WritePrimitive (" int" , type, {kValidityBuffer , kValues16 });
320- }
282+ Status Visit (const UInt16Type& type) override { return WritePrimitive (" int" , type); }
321283
322- Status Visit (const UInt32Type& type) override {
323- return WritePrimitive (" int" , type, {kValidityBuffer , kValues32 });
324- }
284+ Status Visit (const UInt32Type& type) override { return WritePrimitive (" int" , type); }
325285
326- Status Visit (const UInt64Type& type) override {
327- return WritePrimitive (" int" , type, {kValidityBuffer , kValues64 });
328- }
286+ Status Visit (const UInt64Type& type) override { return WritePrimitive (" int" , type); }
329287
330288 Status Visit (const HalfFloatType& type) override {
331- return WritePrimitive (" floatingpoint" , type, { kValidityBuffer , kValues16 } );
289+ return WritePrimitive (" floatingpoint" , type);
332290 }
333291
334292 Status Visit (const FloatType& type) override {
335- return WritePrimitive (" floatingpoint" , type, { kValidityBuffer , kValues32 } );
293+ return WritePrimitive (" floatingpoint" , type);
336294 }
337295
338296 Status Visit (const DoubleType& type) override {
339- return WritePrimitive (" floatingpoint" , type, { kValidityBuffer , kValues64 } );
297+ return WritePrimitive (" floatingpoint" , type);
340298 }
341299
342300 Status Visit (const StringType& type) override { return WriteVarBytes (" utf8" , type); }
343301
344302 Status Visit (const BinaryType& type) override { return WriteVarBytes (" binary" , type); }
345303
346- Status Visit (const DateType& type) override {
347- return WritePrimitive (" date" , type, {kValidityBuffer , kValues64 });
348- }
304+ Status Visit (const DateType& type) override { return WritePrimitive (" date" , type); }
349305
350- Status Visit (const TimeType& type) override {
351- return WritePrimitive (" time" , type, {kValidityBuffer , kValues64 });
352- }
306+ Status Visit (const TimeType& type) override { return WritePrimitive (" time" , type); }
353307
354308 Status Visit (const TimestampType& type) override {
355- return WritePrimitive (" timestamp" , type, { kValidityBuffer , kValues64 } );
309+ return WritePrimitive (" timestamp" , type);
356310 }
357311
358312 Status Visit (const IntervalType& type) override {
359- return WritePrimitive (" interval" , type, { kValidityBuffer , kValues64 } );
313+ return WritePrimitive (" interval" , type);
360314 }
361315
362316 Status Visit (const DecimalType& type) override { return Status::NotImplemented (" NYI" ); }
363317
364318 Status Visit (const ListType& type) override {
365319 WriteName (" list" , type);
366320 RETURN_NOT_OK (WriteChildren (type.children ()));
367- WriteBufferLayout ({ kValidityBuffer , kOffsetBuffer } );
321+ WriteBufferLayout (type. GetBufferLayout () );
368322 return Status::OK ();
369323 }
370324
371325 Status Visit (const StructType& type) override {
372326 WriteName (" struct" , type);
373327 WriteChildren (type.children ());
374- WriteBufferLayout ({ kValidityBuffer , kTypeBuffer } );
328+ WriteBufferLayout (type. GetBufferLayout () );
375329 return Status::OK ();
376330 }
377331
378332 Status Visit (const UnionType& type) override {
379333 WriteName (" union" , type);
380334 WriteChildren (type.children ());
381-
382- if (type.mode == UnionMode::SPARSE) {
383- WriteBufferLayout ({kValidityBuffer , kTypeBuffer });
384- } else {
385- WriteBufferLayout ({kValidityBuffer , kTypeBuffer , kOffsetBuffer });
386- }
335+ WriteBufferLayout (type.GetBufferLayout ());
387336 return Status::OK ();
388337 }
389338
0 commit comments