database-js icon indicating copy to clipboard operation
database-js copied to clipboard

Set use statements

Open ayrton opened this issue 1 year ago • 0 comments

What

Add first class support for USE and SET statements.

Why

We want to make it easier to correctly use PlanetScale over HTTP supporting some of more exotic features (boost, replicas, sharding)

How

You can define which database to use, or which variables to set as part of Config. This means you can pass this onto: connect(), Client#new, Client#connection, Connection#new and Connection#execute().

Config defaults and overrides

// `connect`

connect({ url }).execute('select 1 from dual')
// defaults { database: undefined, variables: undefined }
// overrides { database: undefined, variables: undefined }

connect({ url }).execute('select 1 from dual', [], { database: '@replica' })
// defaults { database: undefined, variables: undefined }
// overrides { database: '@replica', variables: undefined }

connect({ url, database: 'keyspace' }).execute('select 1 from dual')
// defaults { database: 'keyspace', variables: undefined }
// overrides { database: undefined, variables: undefined }

connect({ url, database: 'keyspace' }).execute('select 1 from dual', [], { database: '@replica' })
// defaults { database: 'keyspace', variables: undefined }
// overrides { database: '@replica', variables: undefined }



// `new Client

new Client({ url }).execute('select 1 from dual')
// defaults { database: undefined, variables: undefined }
// overrides { database: undefined, variables: undefined }

new Client().execute('select 1 from dual', [], { database: '@replica' })
// defaults { database: undefined, variables: undefined }
// overrides { database: '@replica', variables: undefined }

new Client({ url, database: 'keyspace' }).execute('select 1 from dual')
// defaults { database: 'keyspace', variables: undefined }
// overrides { database: undefined, variables: undefined }

new Client({ url, database: 'keyspace' }).execute('select 1 from dual', { database: '@replica' })
// defaults { database: 'keyspace', variables: undefined }
// overrides { database: '@replica', variables: undefined }



// `new Client#connection`

new Client({ url }).connection().execute('select 1 from dual')
// defaults { database: undefined, variables: undefined }
// overrides { database: undefined, variables: undefined }

new Client().connection().execute('select 1 from dual', [], { database: '@replica' })
// defaults { database: undefined, variables: undefined }
// overrides { database: '@replica', variables: undefined }

new Client({ url, database: 'keyspace' }).connection().execute('select 1 from dual')
// defaults { database: 'keyspace', variables: undefined }
// overrides { database: undefined, variables: undefined }

new Client({ url, database: 'keyspace' }).connection().execute('select 1 from dual', { database: '@replica' })
// defaults { database: 'keyspace', variables: undefined }
// overrides { database: '@replica', variables: undefined }

new Client({ url }).connection({ database: 'otherkeyspace' }).execute('select 1 from dual')
// defaults { database: 'otherkeyspace', variables: undefined }
// overrides { database: undefined, variables: undefined }

new Client().connection({ database: 'otherkeyspace' }).execute('select 1 from dual', [], { database: '@replica' })
// defaults { database: 'otherkeyspace', variables: undefined }
// overrides { database: '@replica', variables: undefined }

new Client({ url, database: 'keyspace' }).connection({ database: 'otherkeyspace' }).execute('select 1 from dual')
// defaults { database: 'otherkeyspace', variables: undefined }
// overrides { database: undefined, variables: undefined }

new Client({ url, database: 'keyspace' }).connection({ database: 'otherkeyspace' }).execute('select 1 from dual', { database: '@replica' })
// defaults { database: 'otherkeyspace', variables: undefined }
// overrides { database: '@replica', variables: undefined }

ayrton avatar Jan 31 '24 16:01 ayrton