changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > core / lisp/lib/q/engine.lisp

changeset 698: 96958d3eb5b0
parent: d3e2829521a3
author: Richard Westhaver <ellis@rwest.io>
date: Fri, 04 Oct 2024 22:04:59 -0400
permissions: -rw-r--r--
description: fixes
1 ;;; engine.lisp --- Query Engine Protocol
2 
3 ;; Query Engines
4 
5 ;;; Commentary:
6 
7 ;; A QUERY-ENGINE is a single object which provides top-level interfaces for
8 ;; all levels of Query processing.
9 
10 ;;; Code:
11 (in-package :q/proto)
12 
13 ;;; Vars
14 (defvar *query-engine*)
15 (deftype query-dialect-designator () `(member :sql :dql))
16 (declaim (query-dialect-designator *query-dialect*))
17 (defvar *query-dialect* :sql)
18 
19 ;;; Engine
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)))
26 
27 (defgeneric sql (self input)
28  (:documentation "Process sql input and return a DATA-FRAME."))
29 
30 (defgeneric dql (self input)
31  (:documentation "Process dql input and return a DATA-FRAME."))
32 
33 (defmethod execute* ((self query-engine) (plan data-frame))
34  (declare (ignore self))
35  (execute plan))
36 
37 (defmethod optimize-query ((self query-engine) (plan logical-plan))
38  (optimize-query (slot-value self 'query-optimizer) plan))
39 
40 (defmethod execute* ((self query-engine) (plan logical-plan))
41  (execute
42  (make-physical-plan
43  (optimize-query self plan))))