Mercurial > core / lisp/lib/q/engine.lisp
changeset 581: |
d3e2829521a3 |
parent: |
806c2b214df8
|
author: |
Richard Westhaver <ellis@rwest.io> |
date: |
Tue, 06 Aug 2024 21:17:24 -0400 |
permissions: |
-rw-r--r-- |
description: |
tmux work, fuzzer |
1 ;;; engine.lisp --- Query Engine Protocol 7 ;; A QUERY-ENGINE is a single object which provides top-level interfaces for 8 ;; all levels of Query processing. 14 (defvar *query-engine*) 15 (deftype query-dialect-designator () `(member :sql :dql)) 16 (declaim (query-dialect-designator *query-dialect*)) 17 (defvar *query-dialect* :sql) 20 ;; NOTE 2024-08-04: only slot inherited should be :SCHEMA from DATA-SOURCE. A 21 ;; QUERY-ENGINE may always act as a source for another engine (maybe, probably) 22 (defclass query-engine (query-planner execution-context data-source) 23 ((sources :initarg :sources) 24 (parser :initarg :parser :type query-parser) 25 (optimizer :initarg :optimizer :type query-optimizer))) 27 (defgeneric sql (self input) 28 (:documentation "Process sql input and return a DATA-FRAME.")) 30 (defgeneric dql (self input) 31 (:documentation "Process dql input and return a DATA-FRAME.")) 33 (defmethod execute* ((self query-engine) (plan data-frame)) 34 (declare (ignore self)) 37 (defmethod optimize-query ((self query-engine) (plan logical-plan)) 38 (optimize-query (slot-value self 'query-optimizer) plan)) 40 (defmethod execute* ((self query-engine) (plan logical-plan)) 43 (optimize-query self plan))))