changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > core / lisp/lib/dat/parquet/io.lisp

changeset 548: b57066450cfa
parent: ec1d4d544c36
author: Richard Westhaver <ellis@rwest.io>
date: Mon, 15 Jul 2024 20:59:04 -0400
permissions: -rw-r--r--
description: init tcompact encoders
1 ;;; io.lisp --- Parquet IO
2 
3 ;;
4 
5 ;;; Code:
6 (in-package :dat/parquet)
7 
8 ;;; Read/Write
9 (defun parquet-write-magic (stream)
10  (write-string +parquet-magic-number+ stream))
11 
12 (defun parquet-read-magic (stream)
13  (assert (= #.(char-code (aref +parquet-magic-number+ 0)) (read-byte stream)))
14  (assert (= #.(char-code (aref +parquet-magic-number+ 1)) (read-byte stream)))
15  (assert (= #.(char-code (aref +parquet-magic-number+ 2)) (read-byte stream)))
16  (assert (= #.(char-code (aref +parquet-magic-number+ 3)) (read-byte stream))))
17 
18 (defun parquet-read-unsigned (stream)
19  (read-uleb128 stream))
20 
21 (defun parquet-read-signed (stream)
22  (read-leb128 stream))
23 
24 (defun parquet-read-boolean (stream)
25  (ecase (read-byte stream)
26  (0 nil)
27  (1 t)))
28 
29 (defun parquet-file-stream-p (stream)
30  "Assert the start and end of a file STREAM are the parquet magic bytes."
31  (parquet-read-magic stream)
32  ;; set position to end - 4
33  (file-position stream (- (the fixnum (file-length stream)) 4))
34  (parquet-read-magic stream))
35 
36 (defun parquet-read-schema-element (stream))
37 (defun parquet-read-schema (stream)
38  "Read a parquet-schema which is repeated list of parquet-schema-element."
39 
40  )
41 
42 (defun parquet-read-file-meta-data (stream)
43  "Read a parquet-file-meta-data object from STREAM."
44  ;; version
45  (make-instance 'parquet-file-meta-data
46  :version (parquet-read-signed stream)
47  :schema (list (parquet-read-signed stream))))
48 
49 (defun parquet-read-footer (stream)
50  "Read the footer of parquet data in STREAM."
51  (parquet-file-stream-p stream)
52  ;; set file-position, read metadata length and magic
53  (file-position stream (- (file-length stream) 8))
54  (let ((len (parquet-read-unsigned stream)))
55  (file-position stream (- (file-length stream) 8 len))
56  (parquet-read-file-meta-data stream)))