Documentation
¶
Overview ¶
Copyright 2021 CodeNotary, Inc. All rights reserved.
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.
Copyright 2021 CodeNotary, Inc. All rights reserved.
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.
Copyright 2021 CodeNotary, Inc. All rights reserved.
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.
Copyright 2021 CodeNotary, Inc. All rights reserved.
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.
Copyright 2021 CodeNotary, Inc. All rights reserved.
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.
Code generated by goyacc -l -o sql_parser.go sql_grammar.y. DO NOT EDIT.
Index ¶
- Constants
- Variables
- func EncodeAsKey(val interface{}, colType SQLValueType, maxLen int) ([]byte, error)
- func EncodeID(id uint32) []byte
- func EncodeSelector(aggFn, db, table, col string) string
- func EncodeValue(val interface{}, colType SQLValueType, maxLen int) ([]byte, error)
- func MapKey(prefix []byte, mappingPrefix string, encValues ...[]byte) []byte
- type AVGValue
- type AddColumnStmt
- type AggColSelector
- type AggregateFn
- type AggregatedValue
- type BinBoolExp
- type Blob
- type Bool
- type Catalog
- type CmpBoolExp
- type CmpOperator
- type ColDescriptor
- type ColSelector
- type ColSpec
- type Column
- type Comparison
- type CountValue
- type CreateDatabaseStmt
- type CreateIndexStmt
- type CreateTableStmt
- type DataSource
- type Database
- type Engine
- func (e *Engine) Close() error
- func (e *Engine) CloseSnapshot() error
- func (e *Engine) DatabaseInUse() (*Database, error)
- func (e *Engine) DumpCatalogTo(srcName, dstName string, targetStore *store.ImmuStore) error
- func (e *Engine) EnsureCatalogReady(cancellation <-chan struct{}) error
- func (e *Engine) Exec(sql io.ByteReader, params map[string]interface{}, waitForIndexing bool) (summary *ExecSummary, err error)
- func (e *Engine) ExecPreparedStmts(stmts []SQLStmt, params map[string]interface{}, waitForIndexing bool) (summary *ExecSummary, err error)
- func (e *Engine) ExecStmt(sql string, params map[string]interface{}, waitForIndexing bool) (summary *ExecSummary, err error)
- func (e *Engine) ExistDatabase(db string) (bool, error)
- func (e *Engine) GetDatabaseByName(db string) (*Database, error)
- func (e *Engine) GetTableByName(dbName, tableName string) (*Table, error)
- func (e *Engine) InferParameters(sql string) (map[string]SQLValueType, error)
- func (e *Engine) InferParametersPreparedStmt(stmt SQLStmt) (map[string]SQLValueType, error)
- func (e *Engine) Query(sql io.ByteReader, params map[string]interface{}, renewSnapshot bool) (RowReader, error)
- func (e *Engine) QueryPreparedStmt(stmt *SelectStmt, params map[string]interface{}, renewSnapshot bool) (RowReader, error)
- func (e *Engine) QueryStmt(sql string, params map[string]interface{}, renewSnapshot bool) (RowReader, error)
- func (e *Engine) ReloadCatalog(cancellation <-chan struct{}) error
- func (e *Engine) RenewSnapshot() error
- func (e *Engine) UseDatabase(dbName string) error
- func (e *Engine) UseSnapshot(sinceTx uint64, asBeforeTx uint64) error
- type ExecSummary
- type ExistsBoolExp
- type Index
- type JoinSpec
- type JoinType
- type LikeBoolExp
- type LogicOperator
- type MaxValue
- type MinValue
- type NotBoolExp
- type NullValue
- type NumExp
- type NumOperator
- type Number
- type OrdCol
- type Order
- type Param
- type Row
- type RowReader
- type RowSpec
- type SQLStmt
- type SQLValueType
- type ScanSpecs
- type SelectStmt
- type Selector
- type SumValue
- type SysFn
- type Table
- func (t *Table) Cols() []*Column
- func (t *Table) ColsByName() map[string]*Column
- func (t *Table) Database() *Database
- func (t *Table) GetColumnByID(id uint32) (*Column, error)
- func (t *Table) GetColumnByName(name string) (*Column, error)
- func (t *Table) ID() uint32
- func (t *Table) IndexesByColID(colID uint32) []*Index
- func (t *Table) IsIndexed(colName string) (indexed bool, err error)
- func (t *Table) Name() string
- func (t *Table) PrimaryIndex() *Index
- type TxStmt
- type TxSummary
- type TypedValue
- type UpsertIntoStmt
- type UseDatabaseStmt
- type UseSnapshotStmt
- type ValueExp
- type Varchar
Constants ¶
const ( NamedNonPositionalParamType positionalParamType = iota + 1 NamedPositionalParamType UnnamedParamType )
const ( PIndexPrefix = "P." // (key=P.{dbID}{tableID}{0}({pkVal}{padding}{pkValLen})+, value={count (colID valLen val)+}) SIndexPrefix = "S." // (key=S.{dbID}{tableID}{indexID}({val}{padding}{valLen})+({pkVal}{padding}{pkValLen})+, value={}) UIndexPrefix = "U." // (key=U.{dbID}{tableID}{indexID}({val}{padding}{valLen})+, value={({pkVal}{padding}{pkValLen})+}) )
const ADD = 57358
const AGGREGATE_FUNC = 57401
const ALTER = 57357
const AS = 57383
const ASC = 57381
const AUTO_INCREMENT = 57388
const BEFORE = 57372
const BEGIN = 57362
const BLOB = 57400
const BOOLEAN = 57399
const BY = 57378
const CMPOP = 57394
const COLUMN = 57359
const COMMIT = 57364
const CREATE = 57346
const DATABASE = 57348
const DESC = 57382
const DISTINCT = 57370
const ERROR = 57402
const EXISTS = 57387
const EncIDLen = 4
const EncLenLen = 4
const FROM = 57371
const GROUP = 57377
const HAVING = 57375
const IDENTIFIER = 57395
const IF = 57386
const INDEX = 57355
const INSERT = 57365
const INTO = 57367
const JOIN = 57374
const JOINTYPE = 57392
const KEY = 57361
const LIKE = 57385
const LIMIT = 57379
const LOP = 57393
const MaxNumberOfColumnsInIndex = 8
const NOT = 57384
const NPARAM = 57390
const NULL = 57389
const NUMBER = 57397
const ON = 57356
const ORDER = 57380
const PKIndexID = uint32(0)
const PPARAM = 57391
const PRIMARY = 57360
const SELECT = 57369
const SINCE = 57350
const SNAPSHOT = 57349
const STMT_SEPARATOR = 57403
const TABLE = 57353
const TO = 57352
const TRANSACTION = 57363
const TX = 57373
const TYPE = 57396
const UNIQUE = 57354
const UP = 57351
const UPSERT = 57366
const USE = 57347
const VALUES = 57368
const VARCHAR = 57398
const WHERE = 57376
Variables ¶
var ErrAlreadyClosed = errors.New("sql engine already closed")
var ErrCatalogNotReady = errors.New("catalog not ready")
var ErrColumnDoesNotExist = errors.New("column does not exist")
var ErrColumnIsNotAnAggregation = errors.New("column is not an aggregation")
var ErrColumnNotIndexed = errors.New("column is not indexed")
var ErrCorruptedData = store.ErrCorruptedData
var ErrDDLorDMLTxOnly = errors.New("transactions can NOT combine DDL and DML statements")
var ErrDatabaseAlreadyExists = errors.New("database already exists")
var ErrDatabaseDoesNotExist = errors.New("database does not exist")
var ErrDivisionByZero = errors.New("division by zero")
var ErrDuplicatedColumn = errors.New("duplicated column")
var ErrEitherNamedOrUnnamedParams = errors.New("either named or unnamed params")
var ErrEitherPosOrNonPosParams = errors.New("either positional or non-positional named params")
var ErrExpectingDQLStmt = errors.New("illegal statement. DQL statement expected")
var ErrHavingClauseRequiresGroupClause = errors.New("having clause requires group clause")
var ErrIllegalArguments = store.ErrIllegalArguments
var ErrIllegalMappedKey = errors.New("error illegal mapped key")
var ErrIndexAlreadyExists = errors.New("index already exists")
var ErrIndexedColumnCanNotBeNull = errors.New("indexed column can not be null")
var ErrInferredMultipleTypes = errors.New("inferred multiple types")
var ErrInvalidColumn = errors.New("invalid column")
var ErrInvalidCondition = errors.New("invalid condition")
var ErrInvalidNumberOfValues = errors.New("invalid number of values provided")
var ErrInvalidPositionalParameter = errors.New("invalid positional parameter")
var ErrInvalidTypes = errors.New("invalid types")
var ErrInvalidValue = errors.New("invalid value provided")
var ErrLimitedAutoIncrement = errors.New("only INTEGER single-column primary keys can be set as auto incremental")
var ErrLimitedCount = errors.New("only unbounded counting is supported i.e. COUNT()")
var ErrLimitedGroupBy = errors.New("group by requires ordering by the grouping column")
var ErrLimitedIndexCreation = errors.New("index creation is only supported on empty tables")
var ErrLimitedKeyType = errors.New("indexed key of invalid type. Supported types are: INTEGER, VARCHAR[256] OR BLOB[256]")
var ErrLimitedMaxLen = errors.New("only VARCHAR and BLOB types support max length")
var ErrLimitedOrderBy = errors.New("order is limit to one indexed column")
var ErrLimitedUpsert = errors.New("upsert is only supported in tables without secondary indexes")
var ErrMaxKeyLengthExceeded = errors.New("max key length exceeded")
var ErrMaxLengthExceeded = errors.New("max length exceeded")
var ErrMaxNumberOfColumnsInIndexExceeded = errors.New("number of columns in multi-column index exceeded")
var ErrMissingParameter = errors.New("missing parameter")
var ErrNoAvailableIndex = errors.New("no available index")
var ErrNoDatabaseSelected = errors.New("no database selected")
var ErrNoMoreRows = store.ErrNoMoreEntries
var ErrNoSupported = errors.New("not yet supported")
var ErrNoValueForAutoIncrementalColumn = errors.New("no value should be specified for auto incremental columns")
var ErrNotComparableValues = errors.New("values are not comparable")
var ErrNotNullableColumnCannotBeNull = errors.New("not nullable column can not be null")
var ErrPKCanNotBeNull = errors.New("primary key can not be null")
var ErrTableAlreadyExists = errors.New("table already exists")
var ErrTableDoesNotExist = errors.New("table does not exist")
var ErrTxDoesNotExist = errors.New("tx does not exist")
var ErrUnexpected = errors.New("unexpected error")
var ErrUnsupportedJoinType = errors.New("unsupported join type")
var ErrUnsupportedParameter = errors.New("unsupported parameter")
Functions ¶
func EncodeAsKey ¶ added in v1.1.0
func EncodeAsKey(val interface{}, colType SQLValueType, maxLen int) ([]byte, error)
func EncodeSelector ¶
func EncodeValue ¶
func EncodeValue(val interface{}, colType SQLValueType, maxLen int) ([]byte, error)
Types ¶
type AVGValue ¶
type AVGValue struct {
// contains filtered or unexported fields
}
func (*AVGValue) ColBounded ¶
func (*AVGValue) Type ¶
func (v *AVGValue) Type() SQLValueType
type AddColumnStmt ¶
type AddColumnStmt struct {
// contains filtered or unexported fields
}
type AggColSelector ¶
type AggColSelector struct {
// contains filtered or unexported fields
}
type AggregateFn ¶
type AggregateFn = string
const ( COUNT AggregateFn = "COUNT" SUM AggregateFn = "SUM" MAX AggregateFn = "MAX" MIN AggregateFn = "MIN" AVG AggregateFn = "AVG" )
type AggregatedValue ¶
type AggregatedValue interface {
TypedValue
Selector() string
ColBounded() bool
// contains filtered or unexported methods
}
type BinBoolExp ¶
type BinBoolExp struct {
// contains filtered or unexported fields
}
type Blob ¶
type Blob struct {
// contains filtered or unexported fields
}
func (*Blob) Type ¶
func (v *Blob) Type() SQLValueType
type Bool ¶
type Bool struct {
// contains filtered or unexported fields
}
func (*Bool) Type ¶
func (v *Bool) Type() SQLValueType
type Catalog ¶
type Catalog struct {
// contains filtered or unexported fields
}
func (*Catalog) ExistDatabase ¶
func (*Catalog) GetDatabaseByName ¶
type CmpBoolExp ¶
type CmpBoolExp struct {
// contains filtered or unexported fields
}
type ColDescriptor ¶
type ColDescriptor struct {
AggFn string
Database string
Table string
Column string
Type SQLValueType
}
func (*ColDescriptor) Selector ¶
func (d *ColDescriptor) Selector() string
type ColSelector ¶
type ColSelector struct {
// contains filtered or unexported fields
}
type Column ¶
type Column struct {
// contains filtered or unexported fields
}
func (*Column) IsAutoIncremental ¶ added in v1.1.0
func (*Column) IsNullable ¶
func (*Column) Type ¶
func (c *Column) Type() SQLValueType
type Comparison ¶
type Comparison int
const ( EqualTo Comparison = iota LowerThan LowerOrEqualTo GreaterThan GreaterOrEqualTo )
type CountValue ¶
type CountValue struct {
// contains filtered or unexported fields
}
func (*CountValue) ColBounded ¶
func (v *CountValue) ColBounded() bool
func (*CountValue) Compare ¶
func (v *CountValue) Compare(val TypedValue) (int, error)
func (*CountValue) Selector ¶
func (v *CountValue) Selector() string
func (*CountValue) Type ¶
func (v *CountValue) Type() SQLValueType
func (*CountValue) Value ¶
func (v *CountValue) Value() interface{}
type CreateDatabaseStmt ¶
type CreateDatabaseStmt struct {
DB string
}
type CreateIndexStmt ¶
type CreateIndexStmt struct {
// contains filtered or unexported fields
}
type CreateTableStmt ¶
type CreateTableStmt struct {
// contains filtered or unexported fields
}
type DataSource ¶
type Database ¶
type Database struct {
// contains filtered or unexported fields
}
func (*Database) ExistTable ¶
type Engine ¶
type Engine struct {
// contains filtered or unexported fields
}
func (*Engine) CloseSnapshot ¶
func (*Engine) DatabaseInUse ¶
func (*Engine) DumpCatalogTo ¶ added in v1.0.5
func (*Engine) EnsureCatalogReady ¶ added in v1.0.5
TODO (jeroiraz); this operation won't be needed with a transactional in-memory catalog
func (*Engine) Exec ¶
func (e *Engine) Exec(sql io.ByteReader, params map[string]interface{}, waitForIndexing bool) (summary *ExecSummary, err error)
func (*Engine) ExecPreparedStmts ¶
func (*Engine) ExistDatabase ¶ added in v1.0.5
func (*Engine) GetDatabaseByName ¶ added in v1.0.5
func (*Engine) GetTableByName ¶ added in v1.0.5
func (*Engine) InferParameters ¶ added in v1.0.5
func (e *Engine) InferParameters(sql string) (map[string]SQLValueType, error)
func (*Engine) InferParametersPreparedStmt ¶ added in v1.0.5
func (e *Engine) InferParametersPreparedStmt(stmt SQLStmt) (map[string]SQLValueType, error)
func (*Engine) QueryPreparedStmt ¶
func (*Engine) QueryStmt ¶
func (e *Engine) QueryStmt(sql string, params map[string]interface{}, renewSnapshot bool) (RowReader, error)
exist database directly on catalogStore: // existKey(e.mapKey(catalogDatabase, db), e.catalogStore)
func (*Engine) ReloadCatalog ¶ added in v1.0.5
func (*Engine) RenewSnapshot ¶
func (*Engine) UseDatabase ¶
type ExecSummary ¶ added in v1.1.0
type ExecSummary struct {
DDTxs []*store.TxMetadata
DMTxs []*store.TxMetadata
UpdatedRows int
LastInsertedPKs map[string]int64
}
type ExistsBoolExp ¶
type ExistsBoolExp struct {
// contains filtered or unexported fields
}
type Index ¶ added in v1.1.0
type Index struct {
// contains filtered or unexported fields
}
func (*Index) IncludesCol ¶ added in v1.1.0
type LikeBoolExp ¶
type LikeBoolExp struct {
// contains filtered or unexported fields
}
type MaxValue ¶
type MaxValue struct {
// contains filtered or unexported fields
}
func (*MaxValue) ColBounded ¶
func (*MaxValue) Type ¶
func (v *MaxValue) Type() SQLValueType
type MinValue ¶
type MinValue struct {
// contains filtered or unexported fields
}
func (*MinValue) ColBounded ¶
func (*MinValue) Type ¶
func (v *MinValue) Type() SQLValueType
type NotBoolExp ¶
type NotBoolExp struct {
// contains filtered or unexported fields
}
type NullValue ¶
type NullValue struct {
// contains filtered or unexported fields
}
func (*NullValue) Type ¶
func (n *NullValue) Type() SQLValueType
type Number ¶
type Number struct {
// contains filtered or unexported fields
}
func (*Number) Type ¶
func (v *Number) Type() SQLValueType
type Row ¶
type Row struct {
Values map[string]TypedValue
}
func (*Row) Compatible ¶
rows are selector-compatible if both rows have the same assigned value for all specified selectors
type RowReader ¶
type RowReader interface {
ImplicitDB() string
ImplicitTable() string
SetParameters(params map[string]interface{})
Read() (*Row, error)
Close() error
Columns() ([]*ColDescriptor, error)
OrderBy() []*ColDescriptor
ScanSpecs() *ScanSpecs
InferParameters(params map[string]SQLValueType) error
// contains filtered or unexported methods
}
type SQLStmt ¶
type SQLStmt interface {
// contains filtered or unexported methods
}
func ParseString ¶
type SQLValueType ¶
type SQLValueType = string
const ( IntegerType SQLValueType = "INTEGER" BooleanType SQLValueType = "BOOLEAN" VarcharType SQLValueType = "VARCHAR" BLOBType SQLValueType = "BLOB" TimestampType SQLValueType = "TIMESTAMP" AnyType SQLValueType = "ANY" )
type ScanSpecs ¶ added in v1.1.0
type ScanSpecs struct {
// contains filtered or unexported fields
}
type SelectStmt ¶
type SelectStmt struct {
// contains filtered or unexported fields
}
func (*SelectStmt) Alias ¶
func (stmt *SelectStmt) Alias() string
func (*SelectStmt) Limit ¶
func (stmt *SelectStmt) Limit() uint64
type SumValue ¶
type SumValue struct {
// contains filtered or unexported fields
}
func (*SumValue) ColBounded ¶
func (*SumValue) Type ¶
func (v *SumValue) Type() SQLValueType
type Table ¶
type Table struct {
// contains filtered or unexported fields
}
func (*Table) ColsByName ¶
func (*Table) IndexesByColID ¶ added in v1.1.0
func (*Table) PrimaryIndex ¶ added in v1.1.0
type TxSummary ¶ added in v1.1.0
type TxSummary struct {
// contains filtered or unexported fields
}
type TypedValue ¶
type TypedValue interface {
ValueExp
Type() SQLValueType
Value() interface{}
Compare(val TypedValue) (int, error)
}
func DecodeValue ¶
func DecodeValue(b []byte, colType SQLValueType) (TypedValue, int, error)
type UpsertIntoStmt ¶
type UpsertIntoStmt struct {
// contains filtered or unexported fields
}
type UseDatabaseStmt ¶
type UseDatabaseStmt struct {
DB string
}
type UseSnapshotStmt ¶
type UseSnapshotStmt struct {
// contains filtered or unexported fields
}