changeset 524: |
a873b5bbaebe |
parent 523: |
04d0a4f857f6 |
child 525: |
d9bab6705bd5 |
author: |
Richard Westhaver <ellis@rwest.io> |
date: |
Sun, 07 Jul 2024 22:58:35 -0400 |
files: |
lisp/lib/obj/pkg.lisp lisp/lib/obj/query.lisp lisp/lib/skel/core/pkg.lisp lisp/lib/skel/core/proto.lisp |
description: |
query updates |
1.1--- a/lisp/lib/obj/pkg.lisp Sun Jul 07 20:10:49 2024 -0400
1.2+++ b/lisp/lib/obj/pkg.lisp Sun Jul 07 22:58:35 2024 -0400
1.3@@ -393,7 +393,12 @@
1.4 :field-p
1.5 :copy-field
1.6 :field-name
1.7- :field-type))
1.8+ :field-type
1.9+ :column-size
1.10+ :column-value
1.11+ :column-type
1.12+ :column-vector
1.13+ :column-data))
1.14
1.15 (defpackage :obj/secret
1.16 (:nicknames :secret)
2.1--- a/lisp/lib/obj/query.lisp Sun Jul 07 20:10:49 2024 -0400
2.2+++ b/lisp/lib/obj/query.lisp Sun Jul 07 22:58:35 2024 -0400
2.3@@ -25,7 +25,6 @@
2.4
2.5 (defvar *literal-value-types* '(boolean fixnum signed-byte unsigned-byte float double-float string))
2.6 (deftype literal-value-type () `(or ,@*literal-value-types*))
2.7-(deftype literal-value-vector () '(vector literal-value-type))
2.8
2.9 (defstruct field
2.10 (name (symbol-name (gensym "#")) :type simple-string)
2.11@@ -56,23 +55,45 @@
2.12 (declare (ignore env))
2.13 `(make-instance ,(class-of self) :metadata ,(schema-metadata self)))
2.14
2.15+;; convenience interface for FIELD-VECTOR
2.16+(defclass column-vector () ((data :type simple-vector :accessor column-data)))
2.17+
2.18+(defclass literal-value-vector ()
2.19+ ((type :type literal-value-type :initarg :type)
2.20+ (value :initarg :value :accessor column-type :accessor column-literal-value)
2.21+ (size :type fixnum :initarg :size :accessor column-size)))
2.22+
2.23+(defgeneric column-type (self)
2.24+ (:method ((self column-vector))
2.25+ (array-element-type (column-data self))))
2.26+
2.27+(defgeneric column-value (self i)
2.28+ (:method ((self column-vector) (i fixnum))
2.29+ (aref (column-data self) i))
2.30+ (:method ((self literal-value-vector) (i fixnum))
2.31+ (if (or (< i 0) (>= i (column-size self)))
2.32+ (error 'simple-error :format-control "index out of bounds: ~A" :format-arguments i)
2.33+ (column-literal-value self))))
2.34+
2.35+(defgeneric column-size (self)
2.36+ (:method ((self column-vector))
2.37+ (length (column-data self))))
2.38+
2.39 (defstruct record-batch
2.40 (schema (make-schema) :type schema)
2.41 (fields #() :type field-vector))
2.42
2.43-(defclass data-source ()
2.44- ((schema :type schema)))
2.45-
2.46 (defmethod make-load-form ((self record-batch) &optional env)
2.47 (declare (ignore env))
2.48 `(make-record-batch :schema ,(record-batch-schema self) :fields ,(record-batch-fields self)))
2.49
2.50 (defgeneric field (self n)
2.51 (:method ((self record-batch) (n fixnum))
2.52- (svref (record-batch-fields self) n)))
2.53+ (aref (record-batch-fields self) n)))
2.54
2.55-(defmethod fields ((self record-batch))
2.56- (record-batch-fields self))
2.57+(defgeneric fields (self)
2.58+ (:method ((self record-batch))
2.59+ (record-batch-fields self)))
2.60
2.61 (defgeneric schema (self)
2.62 (:method ((self record-batch))
2.63@@ -82,13 +103,17 @@
2.64
2.65 (defgeneric row-count (self)
2.66 (:method ((self record-batch))
2.67- (sequence:length (svref (record-batch-fields self) 0))))
2.68+ (sequence:length (aref (record-batch-fields self) 0))))
2.69
2.70 (defgeneric column-count (self)
2.71 (:method ((self record-batch))
2.72 (length (record-batch-fields self))))
2.73
2.74-(defgeneric scan-data (self &optional projection)
2.75+;;; Data Source
2.76+(defclass data-source ()
2.77+ ((schema :type schema :accessor schema)))
2.78+
2.79+(defgeneric scan-data-source (self projection)
2.80 (:documentation "Scan the data source, selecting the specified columns."))
2.81
2.82 ;;; Data Frame
3.1--- a/lisp/lib/skel/core/pkg.lisp Sun Jul 07 20:10:49 2024 -0400
3.2+++ b/lisp/lib/skel/core/pkg.lisp Sun Jul 07 22:58:35 2024 -0400
3.3@@ -29,7 +29,8 @@
3.4 :sk-vc-push :sk-vc-pull
3.5 :sk-find-rule :sk-find-script
3.6 :sk-find :sk-find*
3.7- :sk-convert :sk-load-component))
3.8+ :sk-convert :sk-load-component
3.9+ :sk-path :sk-path-merge))
3.10
3.11 (defpackage :skel/core/header
3.12 (:use :cl :std :skel/core/err)
3.13@@ -57,7 +58,7 @@
3.14 :skel/core/proto :skel/core/err :skel/core/types :skel/core/vars
3.15 :dat/sxp :skel/core/header :vc :log)
3.16 (:import-from :uiop :ensure-absolute-pathname :read-file-forms)
3.17- (:export :sk-license :sk-author :sk-path :sk-stash :sk-cache :sk-registry :sk-user
3.18+ (:export :sk-license :sk-author :sk-stash :sk-cache :sk-registry :sk-user
3.19 :sk-store :sk-push :sk-pull :sk-include
3.20 :sk-tags :edit-skelrc :sk-target :skel
3.21 :sk-meta :def-sk-class :sk-project :sk-source
3.22@@ -90,7 +91,8 @@
3.23 :find-project-root
3.24 :describe-skeleton
3.25 :describe-project
3.26- :parse-sk-path))
3.27+ :parse-sk-path
3.28+ :find-sk-path))
3.29
3.30 (defpackage :skel/core/vm
3.31 (:use :cl :std :skel/core/err)
4.1--- a/lisp/lib/skel/core/proto.lisp Sun Jul 07 20:10:49 2024 -0400
4.2+++ b/lisp/lib/skel/core/proto.lisp Sun Jul 07 22:58:35 2024 -0400
4.3@@ -51,3 +51,7 @@
4.4 (:documentation "Find a script with the given NAME in SELF."))
4.5 (defgeneric sk-find (item self &key &allow-other-keys))
4.6 (defgeneric sk-find* (items self &key &allow-other-keys))
4.7+(defgeneric sk-path (self)
4.8+ (:documentation "Return the canonical path to this object in the skel universe."))
4.9+(defgeneric sk-path-merge (self root)
4.10+ (:documentation "Merge path of SELF on ROOT."))