enginetest

package
v0.14.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 1, 2022 License: Apache-2.0 Imports: 33 Imported by: 7

Documentation

Overview

Example
package main

import (
	"context"
	"fmt"
	"io"

	sqle "github.com/dolthub/go-mysql-server"
	"github.com/dolthub/go-mysql-server/memory"
	"github.com/dolthub/go-mysql-server/sql"
)

func main() {
	// Create a test memory database and register it to the default engine.
	db := createTestDatabase()
	e := sqle.NewDefault(sql.NewDatabaseProvider(db))

	ctx := sql.NewContext(context.Background()).WithCurrentDB("test")

	_, r, err := e.Query(ctx, `SELECT name, count(*) FROM mytable
	WHERE name = 'John Doe'
	GROUP BY name`)
	checkIfError(err)

	// Iterate results and print them.
	for {
		row, err := r.Next(ctx)
		if err == io.EOF {
			break
		}
		checkIfError(err)

		name := row[0]
		count := row[1]

		fmt.Println(name, count)
	}

}

func checkIfError(err error) {
	if err != nil {
		panic(err)
	}
}

func createTestDatabase() sql.Database {
	db := memory.NewDatabase("test")
	table := memory.NewTable("mytable", sql.NewPrimaryKeySchema(sql.Schema{
		{Name: "name", Type: sql.Text, Source: "mytable"},
		{Name: "email", Type: sql.Text, Source: "mytable"},
	}), db.GetForeignKeyCollection())
	db.AddTable("mytable", table)
	ctx := sql.NewEmptyContext()

	rows := []sql.Row{
		sql.NewRow("John Doe", "john@doe.com"),
		sql.NewRow("John Doe", "johnalt@doe.com"),
		sql.NewRow("Jane Doe", "jane@doe.com"),
		sql.NewRow("Evil Bob", "evilbob@gmail.com"),
	}

	for _, row := range rows {
		table.Insert(ctx, row)
	}

	return db
}
Output:

John Doe 2

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func AddColumn added in v0.12.0

func AddColumn(t *testing.T, ctx *sql.Context, table sql.AlterableTable, column *sql.Column)

AddColumn adds a column to the specified table

func AssertErr

func AssertErr(t *testing.T, e *sqle.Engine, harness Harness, query string, expectedErrKind *errors.Kind, errStrs ...string)

AssertErr asserts that the given query returns an error during its execution, optionally specifying a type of error.

func AssertErrWithBindings added in v0.10.0

func AssertErrWithBindings(t *testing.T, e *sqle.Engine, harness Harness, query string, bindings map[string]sql.Expression, expectedErrKind *errors.Kind, errStrs ...string)

AssertErrWithBindings asserts that the given query returns an error during its execution, optionally specifying a type of error.

func AssertErrWithCtx added in v0.10.0

func AssertErrWithCtx(t *testing.T, e *sqle.Engine, harness Harness, ctx *sql.Context, query string, expectedErrKind *errors.Kind, errStrs ...string)

AssertErrWithCtx is the same as AssertErr, but uses the context given instead of creating one from a harness

func AssertWarningAndTestQuery added in v0.10.0

func AssertWarningAndTestQuery(
	t *testing.T,
	e *sqle.Engine,
	ctx *sql.Context,
	harness Harness,
	query string,
	expected []sql.Row,
	expectedCols []*sql.Column,
	expectedCode int,
	expectedWarningsCount int,
	expectedWarningMessageSubstring string,
	skipResultsCheck bool,
)

AssertWarningAndTestQuery tests the query and asserts an expected warning code. If |ctx| is provided, it will be used. Otherwise the harness will be used to create a fresh context.

func CreateIndexes added in v0.12.0

func CreateIndexes(t *testing.T, harness Harness, engine *sqle.Engine)

func CreateSpatialSubsetTestData added in v0.12.0

func CreateSpatialSubsetTestData(t *testing.T, harness Harness, includedTables []string) []sql.Database

func CreateSpatialTestData added in v0.12.0

func CreateSpatialTestData(t *testing.T, harness Harness) []sql.Database

CreateSpatialTestData uses the provided harness to create test tables and data for tests involving spatial types.

func CreateSubsetTestData

func CreateSubsetTestData(t *testing.T, harness Harness, includedTables []string) []sql.Database

createSubsetTestData creates test tables and data. Passing a non-nil slice for includedTables will restrict the table creation to just those tables named.

func CreateTestData

func CreateTestData(t *testing.T, harness Harness) []sql.Database

CreateTestData uses the provided harness to create test tables and data for many of the other tests.

func DeleteRows

func DeleteRows(t *testing.T, ctx *sql.Context, table sql.DeletableTable, rows ...sql.Row)

func ExtractQueryNode added in v0.12.0

func ExtractQueryNode(node sql.Node) sql.Node

func InsertRows

func InsertRows(t *testing.T, ctx *sql.Context, table sql.InsertableTable, rows ...sql.Row)

func MustQuery added in v0.12.0

func MustQuery(ctx *sql.Context, e *sqle.Engine, q string) (sql.Schema, []sql.Row)

func MustQueryWithBindings added in v0.12.0

func MustQueryWithBindings(ctx *sql.Context, e *sqle.Engine, q string, bindings map[string]sql.Expression) (sql.Schema, []sql.Row)

func MustQueryWithPreBindings added in v0.12.0

func MustQueryWithPreBindings(ctx *sql.Context, e *sqle.Engine, q string, bindings map[string]sql.Expression) (sql.Node, sql.Schema, []sql.Row)

func NewBaseSession

func NewBaseSession() *sql.BaseSession

NewBaseSession returns a new BaseSession compatible with these tests. Most tests will work with any session implementation, but for full compatibility use a session based on this one.

func NewColumnDefaultValue added in v0.12.0

func NewColumnDefaultValue(expr sql.Expression, outType sql.Type, representsLiteral, isParenthesized, mayReturnNil bool) *sql.ColumnDefaultValue

func NewContext

func NewContext(harness Harness) *sql.Context

func NewContextWithClient added in v0.12.0

func NewContextWithClient(harness ClientHarness, client sql.Client) *sql.Context

func NewContextWithEngine

func NewContextWithEngine(harness Harness, engine *sqle.Engine) *sql.Context

func NewEngine

func NewEngine(t *testing.T, harness Harness) *sqle.Engine

NewEngine creates test data and returns an engine using the harness provided.

func NewEngineWithDbs

func NewEngineWithDbs(t *testing.T, harness Harness, databases []sql.Database) *sqle.Engine

NewEngineWithDbs returns a new engine with the databases provided. This is useful if you don't want to implement a full harness but want to run your own tests on DBs you create.

func NewEngineWithProvider added in v0.12.0

func NewEngineWithProvider(_ *testing.T, harness Harness, provider sql.MutableDatabaseProvider) *sqle.Engine

NewEngineWithProvider returns a new engine with the specified provider. This is useful when you don't want to implement a full harness, but you need more control over the database provider than the default test MemoryProvider.

func NewEngineWithProviderSetup added in v0.12.0

func NewEngineWithProviderSetup(t *testing.T, harness Harness, pro sql.MutableDatabaseProvider, setupData []setup.SetupScript) (*sqle.Engine, error)

NewEngineWithProviderSetup creates test data and returns an engine using the harness provided.

func NewSession added in v0.10.0

func NewSession(harness Harness) *sql.Context

func NewSpatialEngine added in v0.12.0

func NewSpatialEngine(t *testing.T, harness Harness) *sqle.Engine

NewSpatialEngine creates test data and returns an engine using the harness provided.

func RunEngineScripts added in v0.12.0

func RunEngineScripts(ctx *sql.Context, e *sqle.Engine, scripts []setup.SetupScript, supportsIndexes bool) (*sqle.Engine, error)

func RunQuery

func RunQuery(t *testing.T, e *sqle.Engine, harness Harness, query string)

RunQuery runs the query given and asserts that it doesn't result in an error.

func RunQueryTests

func RunQueryTests(t *testing.T, harness Harness, queries []queries.QueryTest)

RunQueryTests runs the query tests given after setting up the engine. Useful for testing out a smaller subset of queries during debugging.

func RunQueryWithContext added in v0.10.0

func RunQueryWithContext(t *testing.T, e *sqle.Engine, harness Harness, ctx *sql.Context, query string)

RunQueryWithContext runs the query given and asserts that it doesn't result in an error.

func RunWriteQueryTest added in v0.14.0

func RunWriteQueryTest(t *testing.T, harness Harness, tt queries.WriteQueryTest)

func TestAddAutoIncrementColumn added in v0.14.0

func TestAddAutoIncrementColumn(t *testing.T, harness Harness)

func TestAddColumn

func TestAddColumn(t *testing.T, harness Harness)

todo(max): convert to WriteQueryTest

func TestAddDropPks added in v0.11.0

func TestAddDropPks(t *testing.T, harness Harness)

func TestAlterTable added in v0.12.0

func TestAlterTable(t *testing.T, harness Harness)

func TestAmbiguousColumnResolution

func TestAmbiguousColumnResolution(t *testing.T, harness Harness)

func TestBlobs added in v0.14.0

func TestBlobs(t *testing.T, h Harness)

func TestBrokenInsertScripts added in v0.12.0

func TestBrokenInsertScripts(t *testing.T, harness Harness)

func TestBrokenJSONTableScripts added in v0.14.0

func TestBrokenJSONTableScripts(t *testing.T, harness Harness)

func TestBrokenQueries added in v0.12.0

func TestBrokenQueries(t *testing.T, harness Harness)

func TestCharsetCollationEngine added in v0.14.0

func TestCharsetCollationEngine(t *testing.T, harness Harness)

func TestCharsetCollationWire added in v0.14.0

func TestCharsetCollationWire(t *testing.T, h Harness, sessionBuilder server.SessionBuilder)

func TestChecksOnInsert added in v0.9.0

func TestChecksOnInsert(t *testing.T, harness Harness)

todo(max): rewrite into []ScriptTest

func TestChecksOnUpdate added in v0.10.0

func TestChecksOnUpdate(t *testing.T, harness Harness)

func TestClearWarnings

func TestClearWarnings(t *testing.T, harness Harness)

func TestColumnAliases

func TestColumnAliases(t *testing.T, harness Harness)

TestColumnAliases exercises the logic for naming and referring to column aliases, and unlike other tests in this file checks that the name of the columns in the result schema is correct.

func TestColumnDefaults

func TestColumnDefaults(t *testing.T, harness Harness)

func TestComplexIndexQueries added in v0.12.0

func TestComplexIndexQueries(t *testing.T, harness Harness)

func TestComplexIndexQueriesPrepared added in v0.12.0

func TestComplexIndexQueriesPrepared(t *testing.T, harness Harness)

func TestConcurrentTransactions added in v0.12.0

func TestConcurrentTransactions(t *testing.T, harness Harness)

TestConcurrentTransactions tests that two concurrent processes/transactions can successfully execute without early cancellation.

func TestCreateCheckConstraints added in v0.9.0

func TestCreateCheckConstraints(t *testing.T, harness Harness)

todo(max): rewrite this using info schema and []QueryTest

func TestCreateCheckConstraintsScriptsPrepared added in v0.12.0

func TestCreateCheckConstraintsScriptsPrepared(t *testing.T, harness Harness)

func TestCreateDatabase added in v0.9.0

func TestCreateDatabase(t *testing.T, harness Harness)

func TestCreateForeignKeys

func TestCreateForeignKeys(t *testing.T, harness Harness)

func TestCreateTable

func TestCreateTable(t *testing.T, harness Harness)

func TestCurrentTimestamp added in v0.12.0

func TestCurrentTimestamp(t *testing.T, harness Harness)

func TestDatabaseCollationWire added in v0.14.0

func TestDatabaseCollationWire(t *testing.T, h Harness, sessionBuilder server.SessionBuilder)

func TestDateParse added in v0.11.0

func TestDateParse(t *testing.T, harness Harness)

func TestDelete

func TestDelete(t *testing.T, harness Harness)

func TestDeleteErrors

func TestDeleteErrors(t *testing.T, harness Harness)

func TestDeleteQueriesPrepared added in v0.12.0

func TestDeleteQueriesPrepared(t *testing.T, harness Harness)

func TestDerivedTableOuterScopeVisibility added in v0.14.0

func TestDerivedTableOuterScopeVisibility(t *testing.T, harness Harness)

func TestDisallowedCheckConstraints added in v0.9.0

func TestDisallowedCheckConstraints(t *testing.T, harness Harness)

func TestDropCheckConstraints added in v0.9.0

func TestDropCheckConstraints(t *testing.T, harness Harness)

todo(max): rewrite with []ScriptTest

func TestDropColumn

func TestDropColumn(t *testing.T, harness Harness)

todo(max): convert to WriteQueryTest

func TestDropColumnKeylessTables added in v0.12.0

func TestDropColumnKeylessTables(t *testing.T, harness Harness)

func TestDropConstraints added in v0.10.0

func TestDropConstraints(t *testing.T, harness Harness)

func TestDropDatabase added in v0.9.0

func TestDropDatabase(t *testing.T, harness Harness)

func TestDropForeignKeys

func TestDropForeignKeys(t *testing.T, harness Harness)

func TestDropTable

func TestDropTable(t *testing.T, harness Harness)

func TestForeignKeys added in v0.12.0

func TestForeignKeys(t *testing.T, harness Harness)

func TestIgnoreIntoWithDuplicateUniqueKeyKeyless added in v0.14.0

func TestIgnoreIntoWithDuplicateUniqueKeyKeyless(t *testing.T, harness Harness)

todo: merge this into the above test when https://github.com/dolthub/dolt/issues/3836 is fixed

func TestIndexQueryPlans added in v0.12.0

func TestIndexQueryPlans(t *testing.T, harness Harness)

func TestInfoSchema

func TestInfoSchema(t *testing.T, h Harness)

TestInfoSchema runs tests of the information_schema database

func TestInfoSchemaPrepared added in v0.12.0

func TestInfoSchemaPrepared(t *testing.T, harness Harness)

TestInfoSchemaPrepared runs tests of the information_schema database

func TestInnerNestedInNaturalJoins

func TestInnerNestedInNaturalJoins(t *testing.T, harness Harness)

func TestInsertErrorScriptsPrepared added in v0.12.0

func TestInsertErrorScriptsPrepared(t *testing.T, harness Harness)

func TestInsertIgnoreInto added in v0.10.0

func TestInsertIgnoreInto(t *testing.T, harness Harness)

func TestInsertIgnoreScriptsPrepared added in v0.12.0

func TestInsertIgnoreScriptsPrepared(t *testing.T, harness Harness)

func TestInsertInto

func TestInsertInto(t *testing.T, harness Harness)

func TestInsertIntoErrors

func TestInsertIntoErrors(t *testing.T, harness Harness)

func TestInsertQueriesPrepared added in v0.12.0

func TestInsertQueriesPrepared(t *testing.T, harness Harness)

func TestInsertScriptsPrepared added in v0.12.0

func TestInsertScriptsPrepared(t *testing.T, harness Harness)

func TestIntegrationPlans added in v0.14.0

func TestIntegrationPlans(t *testing.T, harness Harness)

func TestJSONTableQueries added in v0.14.0

func TestJSONTableQueries(t *testing.T, harness Harness)

func TestJSONTableScripts added in v0.14.0

func TestJSONTableScripts(t *testing.T, harness Harness)

func TestJoinQueries added in v0.12.0

func TestJoinQueries(t *testing.T, harness Harness)

TestJoinQueries tests join queries against a provided harness.

func TestJsonScripts added in v0.9.0

func TestJsonScripts(t *testing.T, harness Harness)

func TestJsonScriptsPrepared added in v0.12.0

func TestJsonScriptsPrepared(t *testing.T, harness Harness)

func TestLoadData added in v0.9.0

func TestLoadData(t *testing.T, harness Harness)

func TestLoadDataErrors added in v0.9.0

func TestLoadDataErrors(t *testing.T, harness Harness)

func TestLoadDataFailing added in v0.9.0

func TestLoadDataFailing(t *testing.T, harness Harness)

func TestLoadDataPrepared added in v0.12.0

func TestLoadDataPrepared(t *testing.T, harness Harness)

func TestModifyColumn

func TestModifyColumn(t *testing.T, harness Harness)

todo(max): convert to WriteQueryTest

func TestNamedWindows added in v0.12.0

func TestNamedWindows(t *testing.T, harness Harness)

func TestNaturalJoin

func TestNaturalJoin(t *testing.T, harness Harness)

func TestNaturalJoinDisjoint

func TestNaturalJoinDisjoint(t *testing.T, harness Harness)

func TestNaturalJoinEqual

func TestNaturalJoinEqual(t *testing.T, harness Harness)

func TestNoDatabaseSelected added in v0.12.0

func TestNoDatabaseSelected(t *testing.T, harness Harness)

func TestNullRanges added in v0.12.0

func TestNullRanges(t *testing.T, harness Harness)

func TestOrderByGroupBy

func TestOrderByGroupBy(t *testing.T, harness Harness)

func TestPersist added in v0.12.0

func TestPersist(t *testing.T, harness Harness, newPersistableSess func(ctx *sql.Context) sql.PersistableSession)

func TestPkOrdinalsDDL added in v0.12.0

func TestPkOrdinalsDDL(t *testing.T, harness Harness)

func TestPkOrdinalsDML added in v0.12.0

func TestPkOrdinalsDML(t *testing.T, harness Harness)

func TestPrepared added in v0.12.0

func TestPrepared(t *testing.T, harness Harness)

func TestPreparedInsert added in v0.12.0

func TestPreparedInsert(t *testing.T, harness Harness)

func TestPreparedQuery added in v0.12.0

func TestPreparedQuery(t *testing.T, harness Harness, q string, expected []sql.Row, expectedCols []*sql.Column)

TestPreparedQuery runs a prepared query on the engine given and asserts that results are as expected.

func TestPreparedQueryWithContext added in v0.12.0

func TestPreparedQueryWithContext(
	t *testing.T,
	ctx *sql.Context,
	e *sqle.Engine,
	h Harness,
	q string,
	expected []sql.Row,
	expectedCols []*sql.Column,
)

func TestPreparedQueryWithEngine added in v0.12.0

func TestPreparedQueryWithEngine(t *testing.T, harness Harness, e *sqle.Engine, tt queries.QueryTest)

func TestPreparedStaticIndexQuery added in v0.12.0

func TestPreparedStaticIndexQuery(t *testing.T, harness Harness)

func TestPrivilegePersistence added in v0.12.0

func TestPrivilegePersistence(t *testing.T, h Harness)

func TestQueries

func TestQueries(t *testing.T, harness Harness)

TestQueries tests a variety of queries against databases and tables provided by the given harness.

func TestQueriesPrepared added in v0.12.0

func TestQueriesPrepared(t *testing.T, harness Harness)

func TestQuery

func TestQuery(t *testing.T, harness Harness, q string, expected []sql.Row, expectedCols []*sql.Column, bindings map[string]sql.Expression)

TestQuery runs a query on the engine given and asserts that results are as expected.

func TestQueryErrors

func TestQueryErrors(t *testing.T, harness Harness)

func TestQueryPlan

func TestQueryPlan(t *testing.T, harness Harness, e *sqle.Engine, query string, expectedPlan string)

TestQueryPlan analyzes the query given and asserts that its printed plan matches the expected one.

func TestQueryPlanWithEngine added in v0.12.0

func TestQueryPlanWithEngine(t *testing.T, harness Harness, e *sqle.Engine, tt queries.QueryPlanTest)

func TestQueryPlans

func TestQueryPlans(t *testing.T, harness Harness, planTests []queries.QueryPlanTest)

Tests generating the correct query plans for various queries using databases and tables provided by the given harness.

func TestQueryWithContext

func TestQueryWithContext(t *testing.T, ctx *sql.Context, e *sqle.Engine, harness Harness, q string, expected []sql.Row, expectedCols []*sql.Column, bindings map[string]sql.Expression)

func TestQueryWithEngine added in v0.12.0

func TestQueryWithEngine(t *testing.T, harness Harness, e *sqle.Engine, tt queries.QueryTest)

func TestReadOnly

func TestReadOnly(t *testing.T, harness Harness)

func TestReadOnlyDatabases added in v0.11.0

func TestReadOnlyDatabases(t *testing.T, harness Harness)

func TestRecursiveViewDefinition added in v0.14.0

func TestRecursiveViewDefinition(t *testing.T, harness Harness)

func TestRenameColumn

func TestRenameColumn(t *testing.T, harness Harness)

func TestRenameTable

func TestRenameTable(t *testing.T, harness Harness)

func TestReplaceInto

func TestReplaceInto(t *testing.T, harness Harness)

func TestReplaceIntoErrors

func TestReplaceIntoErrors(t *testing.T, harness Harness)

func TestReplaceQueriesPrepared added in v0.12.0

func TestReplaceQueriesPrepared(t *testing.T, harness Harness)

func TestRollbackTriggers added in v0.12.0

func TestRollbackTriggers(t *testing.T, harness Harness)

func TestScript

func TestScript(t *testing.T, harness Harness, script queries.ScriptTest)

TestScript runs the test script given, making any assertions given

func TestScriptPrepared added in v0.12.0

func TestScriptPrepared(t *testing.T, harness Harness, script queries.ScriptTest) bool

TestScriptPrepared substitutes literals for bindvars, runs the test script given, and makes any assertions given

func TestScriptWithEngine

func TestScriptWithEngine(t *testing.T, e *sqle.Engine, harness Harness, script queries.ScriptTest)

TestScriptWithEngine runs the test script given with the engine provided.

func TestScriptWithEnginePrepared added in v0.12.0

func TestScriptWithEnginePrepared(t *testing.T, e *sqle.Engine, harness Harness, script queries.ScriptTest)

TestScriptWithEnginePrepared runs the test script with bindvars substituted for literals using the engine provided.

func TestScripts

func TestScripts(t *testing.T, harness Harness)

func TestScriptsPrepared added in v0.12.0

func TestScriptsPrepared(t *testing.T, harness Harness)

func TestSessionSelectLimit

func TestSessionSelectLimit(t *testing.T, harness Harness)

func TestShowTableStatus added in v0.9.0

func TestShowTableStatus(t *testing.T, harness Harness)

Runs tests on SHOW TABLE STATUS queries.

func TestShowTableStatusPrepared added in v0.12.0

func TestShowTableStatusPrepared(t *testing.T, harness Harness)

Runs tests on SHOW TABLE STATUS queries.

func TestShowTriggers added in v0.12.0

func TestShowTriggers(t *testing.T, harness Harness)

func TestSpatialDelete added in v0.12.0

func TestSpatialDelete(t *testing.T, harness Harness)

func TestSpatialInsertInto added in v0.12.0

func TestSpatialInsertInto(t *testing.T, harness Harness)

func TestSpatialQueries added in v0.12.0

func TestSpatialQueries(t *testing.T, harness Harness)

TestSpatialQueries tests a variety of geometry queries against databases and tables provided by the given harness.

func TestSpatialQueriesPrepared added in v0.12.0

func TestSpatialQueriesPrepared(t *testing.T, harness Harness)

TestSpatialQueriesPrepared tests a variety of geometry queries against databases and tables provided by the given harness.

func TestSpatialScripts added in v0.12.0

func TestSpatialScripts(t *testing.T, harness Harness)

func TestSpatialUpdate added in v0.12.0

func TestSpatialUpdate(t *testing.T, harness Harness)

func TestStatistics added in v0.14.0

func TestStatistics(t *testing.T, harness Harness)

TestStatistics tests the statistics from ANALYZE TABLE

func TestStatisticsPrepared added in v0.14.0

func TestStatisticsPrepared(t *testing.T, harness Harness)

TestStatisticsPrepared tests the statistics from ANALYZE TABLE

func TestStoredProcedures added in v0.9.0

func TestStoredProcedures(t *testing.T, harness Harness)

func TestTracing

func TestTracing(t *testing.T, harness Harness)

func TestTransactionScript added in v0.10.0

func TestTransactionScript(t *testing.T, harness Harness, script queries.TransactionTest) bool

TestTransactionScript runs the test script given, making any assertions given

func TestTransactionScriptWithEngine added in v0.10.0

func TestTransactionScriptWithEngine(t *testing.T, e *sqle.Engine, harness Harness, script queries.TransactionTest)

TestTransactionScriptWithEngine runs the transaction test script given with the engine provided.

func TestTransactionScripts added in v0.10.0

func TestTransactionScripts(t *testing.T, harness Harness)

func TestTriggerErrors

func TestTriggerErrors(t *testing.T, harness Harness)

func TestTriggers

func TestTriggers(t *testing.T, harness Harness)

func TestTruncate

func TestTruncate(t *testing.T, harness Harness)

func TestTypesOverWire added in v0.12.0

func TestTypesOverWire(t *testing.T, h Harness, sessionBuilder server.SessionBuilder)

func TestUpdate

func TestUpdate(t *testing.T, harness Harness)

func TestUpdateErrors

func TestUpdateErrors(t *testing.T, harness Harness)

func TestUpdateIgnore added in v0.14.0

func TestUpdateIgnore(t *testing.T, harness Harness)

func TestUpdateQueriesPrepared added in v0.12.0

func TestUpdateQueriesPrepared(t *testing.T, harness Harness)

func TestUse

func TestUse(t *testing.T, harness Harness)

func TestUserAuthentication added in v0.12.0

func TestUserAuthentication(t *testing.T, h Harness)

func TestUserPrivileges added in v0.12.0

func TestUserPrivileges(t *testing.T, h Harness)

func TestValidateSession added in v0.14.0

func TestValidateSession(t *testing.T, harness Harness, newSessFunc func(ctx *sql.Context) sql.PersistableSession, count *int)

func TestVariableErrors

func TestVariableErrors(t *testing.T, harness Harness)

func TestVariables

func TestVariables(t *testing.T, harness Harness)

func TestVersionedQueries

func TestVersionedQueries(t *testing.T, harness Harness)

Tests a variety of queries against databases and tables provided by the given harness.

func TestVersionedQueriesPrepared added in v0.12.0

func TestVersionedQueriesPrepared(t *testing.T, harness Harness)

Tests a variety of queries against databases and tables provided by the given harness.

func TestVersionedViews

func TestVersionedViews(t *testing.T, harness Harness)

func TestVersionedViewsPrepared added in v0.12.0

func TestVersionedViewsPrepared(t *testing.T, harness Harness)

func TestViews

func TestViews(t *testing.T, harness Harness)

func TestViewsPrepared added in v0.12.0

func TestViewsPrepared(t *testing.T, harness Harness)

func TestWarnings

func TestWarnings(t *testing.T, harness Harness)

func TestWindowFunctions added in v0.12.0

func TestWindowFunctions(t *testing.T, harness Harness)

func TestWindowRangeFrames added in v0.12.0

func TestWindowRangeFrames(t *testing.T, harness Harness)

func TestWindowRowFrames added in v0.12.0

func TestWindowRowFrames(t *testing.T, harness Harness)

func WidenRow

func WidenRow(sch sql.Schema, row sql.Row) sql.Row

See WidenRows

func WidenRows

func WidenRows(sch sql.Schema, rows []sql.Row) []sql.Row

For a variety of reasons, the widths of various primitive types can vary when passed through different SQL queries (and different database implementations). We may eventually decide that this undefined behavior is a problem, but for now it's mostly just an issue when comparing results in tests. To get around this, we widen every type to its widest value in actual and expected results.

Types

type ClientHarness added in v0.12.0

type ClientHarness interface {
	Harness

	// NewContextWithClient returns a context that will return the given client when requested from the session.
	NewContextWithClient(client sql.Client) *sql.Context
}

ClientHarness allows for integrators to test user privileges, as mock clients are used to test functionality.

type ForeignKeyHarness

type ForeignKeyHarness interface {
	Harness

	// SupportsForeignKeys returns whether this harness should accept CREATE FOREIGN KEY statements as part of test
	// setup.
	SupportsForeignKeys() bool
}

ForeignKeyHarness is an extension to Harness that lets an integrator test their implementation with foreign keys. Integrator tables must implement sql.ForeignKeyTable.

type Harness

type Harness interface {
	// Parallelism returns how many parallel go routines to use when constructing an engine for test.
	Parallelism() int
	// NewDatabase returns a sql.Database to use for a test. This method will always be called before asking for a
	// context or other information.
	NewDatabase(name string) sql.Database
	// NewDatabases returns a set of new databases, for test setup that requires more than one database.
	NewDatabases(names ...string) []sql.Database
	// NewDatabaseProvider returns a sql.MutableDatabaseProvider to use for a test.
	NewDatabaseProvider(dbs ...sql.Database) sql.MutableDatabaseProvider
	// NewTable takes a database previously created by NewDatabase and returns a table created with the given schema.
	NewTable(db sql.Database, name string, schema sql.PrimaryKeySchema) (sql.Table, error)
	// NewContext allows a harness to specify any sessions or context variables necessary for the proper functioning of
	// their engine implementation. Every harnessed engine test uses the context created by this method, with some
	// additional information (e.g. current DB) set uniformly. To replicated the behavior of tests during setup,
	// harnesses should generally dispatch to enginetest.NewContext(harness), rather than calling this method themselves.
	NewContext() *sql.Context
	// Setup injects a test suite's setup scripts. The harness is expected to run
	// these scripts before returning NewEngine
	Setup(...[]setup.SetupScript)
	// NewEngine creates a new sqle.Engine. Ready only tests may re-use an
	// engine. Write tests call NewEngine before every test, expecting the
	// fresh state provided by Setup.
	NewEngine(*testing.T) (*sqle.Engine, error)
}

Harness provides a way for database integrators to validate their implementation against the standard set of queries used to develop and test the engine itself. See memory_engine_test.go for an example.

type IndexDriverHarness

type IndexDriverHarness interface {
	Harness

	// InitializeIndexDriver initializes the index driver for this test run with the databases given
	InitializeIndexDriver(dbs []sql.Database)
}

IndexDriverHarness is an extension to Harness that lets an integrator test their implementation alongside an index driver they provide.

type IndexDriverInitalizer

type IndexDriverInitalizer func([]sql.Database) sql.IndexDriver

type IndexHarness

type IndexHarness interface {
	Harness

	// SupportsNativeIndexCreation returns whether this harness should accept CREATE INDEX statements as part of test
	// setup.
	SupportsNativeIndexCreation() bool
}

IndexHarness is an extension to Harness that lets an integrator test their implementation with native (table-supplied) indexes. Integrator tables must implement sql.IndexAlterableTable.

type KeylessTableHarness

type KeylessTableHarness interface {
	Harness

	// SupportsKeylessTables indicates integrator support for keyless tables.
	SupportsKeylessTables() bool
}

KeylessTableHarness is an extension to Harness that lets an integrator test their implementation with keyless tables.

type MemoryHarness

type MemoryHarness struct {
	// contains filtered or unexported fields
}

func NewDefaultMemoryHarness

func NewDefaultMemoryHarness() *MemoryHarness

func NewMemoryHarness

func NewMemoryHarness(name string, parallelism int, numTablePartitions int, useNativeIndexes bool, indexDriverInitalizer IndexDriverInitalizer) *MemoryHarness

func (*MemoryHarness) ExternalStoredProcedure added in v0.14.0

func (m *MemoryHarness) ExternalStoredProcedure(_ *sql.Context, name string, numOfParams int) (*sql.ExternalStoredProcedureDetails, error)

ExternalStoredProcedure implements the sql.ExternalStoredProcedureProvider interface

func (*MemoryHarness) ExternalStoredProcedures added in v0.14.0

func (m *MemoryHarness) ExternalStoredProcedures(_ *sql.Context, name string) ([]sql.ExternalStoredProcedureDetails, error)

ExternalStoredProcedures implements the sql.ExternalStoredProcedureProvider interface

func (*MemoryHarness) IndexDriver

func (m *MemoryHarness) IndexDriver(dbs []sql.Database) sql.IndexDriver

func (*MemoryHarness) InitializeIndexDriver added in v0.11.0

func (m *MemoryHarness) InitializeIndexDriver(dbs []sql.Database)

func (*MemoryHarness) NewContext

func (m *MemoryHarness) NewContext() *sql.Context

func (*MemoryHarness) NewContextWithClient added in v0.12.0

func (m *MemoryHarness) NewContextWithClient(client sql.Client) *sql.Context

func (*MemoryHarness) NewDatabase

func (m *MemoryHarness) NewDatabase(name string) sql.Database

func (*MemoryHarness) NewDatabaseProvider added in v0.11.0

func (m *MemoryHarness) NewDatabaseProvider(dbs ...sql.Database) sql.MutableDatabaseProvider

func (*MemoryHarness) NewDatabases added in v0.10.0

func (m *MemoryHarness) NewDatabases(names ...string) []sql.Database

func (*MemoryHarness) NewEngine added in v0.12.0

func (m *MemoryHarness) NewEngine(t *testing.T) (*sqle.Engine, error)

func (*MemoryHarness) NewReadOnlyDatabases added in v0.11.0

func (m *MemoryHarness) NewReadOnlyDatabases(names ...string) []sql.ReadOnlyDatabase

func (*MemoryHarness) NewSession added in v0.10.0

func (m *MemoryHarness) NewSession() *sql.Context

func (*MemoryHarness) NewTable

func (m *MemoryHarness) NewTable(db sql.Database, name string, schema sql.PrimaryKeySchema) (sql.Table, error)

func (*MemoryHarness) NewTableAsOf

func (m *MemoryHarness) NewTableAsOf(db sql.VersionedDatabase, name string, schema sql.PrimaryKeySchema, asOf interface{}) sql.Table

func (*MemoryHarness) Parallelism

func (m *MemoryHarness) Parallelism() int

func (*MemoryHarness) QueriesToSkip added in v0.12.0

func (m *MemoryHarness) QueriesToSkip(queries ...string)

func (*MemoryHarness) Setup added in v0.12.0

func (m *MemoryHarness) Setup(setupData ...[]setup.SetupScript)

func (*MemoryHarness) SkipQueryTest added in v0.10.0

func (m *MemoryHarness) SkipQueryTest(query string) bool

func (*MemoryHarness) SnapshotTable

func (m *MemoryHarness) SnapshotTable(db sql.VersionedDatabase, name string, asOf interface{}) error

func (*MemoryHarness) SupportsForeignKeys

func (m *MemoryHarness) SupportsForeignKeys() bool

func (*MemoryHarness) SupportsKeylessTables

func (m *MemoryHarness) SupportsKeylessTables() bool

func (*MemoryHarness) SupportsNativeIndexCreation

func (m *MemoryHarness) SupportsNativeIndexCreation() bool

func (*MemoryHarness) ValidateEngine added in v0.12.0

func (m *MemoryHarness) ValidateEngine(ctx *sql.Context, e *sqle.Engine) error

type ReadOnlyDatabaseHarness added in v0.11.0

type ReadOnlyDatabaseHarness interface {
	Harness

	// NewReadOnlyDatabases returns a sql.ReadOnlyDatabase to use for a test.
	NewReadOnlyDatabases(...string) []sql.ReadOnlyDatabase
}

type SkippingHarness

type SkippingHarness interface {
	// SkipQueryTest returns whether to skip a test of the provided query string.
	SkipQueryTest(query string) bool
}

SkippingHarness provides a way for integrators to skip tests that are known to be broken. E.g., integrators that can't handle every possible SQL type.

type SkippingMemoryHarness

type SkippingMemoryHarness struct {
	MemoryHarness
}

func NewSkippingMemoryHarness

func NewSkippingMemoryHarness() *SkippingMemoryHarness

func (SkippingMemoryHarness) SkipQueryTest

func (s SkippingMemoryHarness) SkipQueryTest(query string) bool

type TransactionHarness added in v0.10.0

type TransactionHarness interface {
	Harness

	// NewSession returns a context with a new Session, rather than reusing an existing session from previous calls to
	// NewContext()
	NewSession() *sql.Context
}

type ValidatingHarness added in v0.12.0

type ValidatingHarness interface {
	Harness

	// ValidateEngine runs post-test assertions against an engine.
	ValidateEngine(ctx *sql.Context, e *sqle.Engine) error
}

type VersionedDBHarness

type VersionedDBHarness interface {
	Harness

	// NewTableAsOf creates a new table with the given name and schema, optionally handling snapshotting with the asOf
	// identifier. NewTableAsOf must ignore tables that already exist in the database. Tables returned by this method do
	// not need to have any previously created data in them, but they can. This behavior is implementation specific, and
	// the harness works either way.
	NewTableAsOf(db sql.VersionedDatabase, name string, schema sql.PrimaryKeySchema, asOf interface{}) sql.Table
	// SnapshotTable creates a snapshot of the table named with the given asOf label. Depending on the implementation,
	// NewTableAsOf might do all the necessary work to create such snapshots, so this could be a no-op.
	SnapshotTable(db sql.VersionedDatabase, name string, asOf interface{}) error
}

VersionedDBHarness is an extension to Harness that lets an integrator test their implementation of versioned (AS OF) queries. Integrators must implement sql.VersionedDatabase. For each table version being created, there will be a call to NewTableAsOf, some number of Delete and Insert operations, and then a call to SnapshotTable.

Directories

Path Synopsis
scriptgen
cmd/scriptgen command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL