changelog shortlog graph tags branches files raw help

Mercurial > core / changeset: query updates

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."))