Skip to content
A compiler for a SQL dialect and mathematical meta-system with support for heterogeneous structured data
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
api/src
common/src Fix rvalue interpreter handling of undefined Mar 5, 2019
connector/src Replace ParseInstructions with ScalarStages Feb 8, 2019
core/src Add more tests for inferred projection names Feb 6, 2019
datagen/src
ejson/src Move ejson TemporalKeys out of QDataEJson Nov 20, 2018
foundation/src 116.0.0: Single field object select Feb 11, 2019
frontend/src Add IdOnly and IncludeId tests for nested pivoting in cartouches Mar 15, 2019
impl/src Add spec for SimpleCompositeResourceSchema Mar 7, 2019
project Upgrade jawn to 0.14.1, cats-effect to 1.1.0, fs2 to 1.0.2 Jan 22, 2019
qscript/src
qsu/src Join multiple tails when computing Map provenance Feb 24, 2019
run/src
scripts
sql/src Add sql parser spec for parsing addition of sums Oct 19, 2018
sst/src
.appveyor.yml Don't test exclusive in appveyor Dec 12, 2018
.gitignore
.jvmopts
.mailmap
.travis.yml
CLA.md
LICENSE
README.md
build.sbt
fs2-gzip-version
qdata-version
sbt
sbt.bat
tectonic-version
version.sbt

README.md

Quasar Travis Discord

Quasar is a purely-functional compiler and optimizing planner for queries expressed in terms of the Multidimensional Relational Algebra (MRA). Quasar has support for arbitrary backends, both heavyweight (full evaluation engines) and lightweight (simple reads with optional pushdown of structural operations and columnar predicates), including full classpath isolation for lightweight backends.

It's important to note that Quasar is not, in and of itself, a runnable application. It is a library which is used by the broader SlamData product, much of which is closed-source. Contributions are very much welcome, as is feedback, questions, and general conversation. Join the Discord!

Building and Testing

Quasar builds with SBT:

$ ./sbt
> test:compile
> test

If running on Windows, you may use the SBT batch file instead of the shell script.

Code Organization

Probably the most interesting part of the codebase is the optimizing query planner, which is implemented in the qsu submodule, based on data structures defined in qscript. I recommend starting by looking at the LPtoQS class, which defines a kleisli composition that clearly lays out all of the phases of the compiler. The core data structure used by the compiler is QSUGraph, which is a purely functional representation of a directed acyclic graph, which in turn represents data flow in a query.

The formulation of the query plan itself is a fixed-point data structure dictated by several pattern functors composed via coproducts. The primary such pattern functor is QScriptCore. You would generally deconstruct and interpret this query plan using general folds provided by matryoshka.

Query operations which are pushed down to the underlying data source are represented by ScalarStage, and carried via InterpretedRead. Data sources are always free to only implement a subset of the pushdown functionality.

The codebase makes extremely heavy use of Scalaz and Cats throughout (using shims to solve the impedance between them), and many high-level operations (such as datasets) are represented as fs2 streams.

Legal

Copyright © 2014 - 2019 SlamData Inc.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.