Skip to main content

CreateVirtualTable

Struct CreateVirtualTable 

Source
pub struct CreateVirtualTable {
    pub if_not_exists: bool,
    pub name: ObjectName,
    pub module: Ident,
    pub args: Option<ThinVec<ModuleArg>>,
    pub meta: Meta,
}
Expand description

A SQLite CREATE VIRTUAL TABLE [IF NOT EXISTS] [<schema> .] <name> USING <module> [( <arg> [, <arg>] * )] statement (SQLite-specific; gated by StatementDdlGates::create_virtual_table).

A virtual table delegates its storage and query implementation to a module (fts5, rtree, csv, …). The module — not SQLite’s core grammar — owns the argument syntax: fts5 reads column names and tokenize = … options, rtree reads dimension columns, and a bespoke module reads whatever it likes. SQLite’s own parser therefore imposes almost no structure on the argument list — it splits the parenthesized text on the top-level commas (parentheses nest and quoted strings are transparent) and hands each raw slice to the module verbatim, even tolerating empty members (USING m(a,,b)). Module resolution and any argument validation happen at execution time, so the parse layer accepts an unknown module and any balanced-parenthesis token soup.

Each argument is consequently modelled as an OPAQUE verbatim ModuleArg (the interned source text of one top-level slice), never a parsed sub-grammar — imposing column/option structure would invent constraints SQLite does not enforce.

args is None for the bare USING m form and Some (possibly empty) for the parenthesized USING m (…) form, so the two round-trip distinctly. The name admits at most two parts (schema.table); SQLite has no TEMP virtual table, so no temporary modifier is modelled. Non-generic: the arguments hold no expressions or extension nodes.

Fields§

§if_not_exists: bool

Whether the if not exists form was present in the source.

§name: ObjectName

Name referenced by this syntax.

§module: Ident

The virtual-table module name (USING <module>).

§args: Option<ThinVec<ModuleArg>>

Arguments in source order.

§meta: Meta

Source location and node identity.

Trait Implementations§

Source§

impl Clone for CreateVirtualTable

Source§

fn clone(&self) -> CreateVirtualTable

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CreateVirtualTable

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for CreateVirtualTable

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Eq for CreateVirtualTable

Source§

impl Hash for CreateVirtualTable

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for CreateVirtualTable

Source§

fn eq(&self, other: &CreateVirtualTable) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Render for CreateVirtualTable

Source§

fn render(&self, ctx: &RenderCtx<'_>, f: &mut Formatter<'_>) -> Result

Return the render for this value.
Source§

fn operand_binding_power(&self) -> Option<BindingPower>

The binding power this node contributes when it appears as an operand, or None (the default) for a self-delimiting node — an atom, call, or constructor — that never needs parentheses. Read more
Source§

impl Serialize for CreateVirtualTable

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl Spanned for CreateVirtualTable

Source§

fn span(&self) -> Span

Return the span for this value.
Source§

impl StructuralPartialEq for CreateVirtualTable

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> DynAstExt for T
where T: Extension + Render + 'static,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Erase to &dyn Any for downcasting a node back to its concrete type.
Source§

fn dyn_clone(&self) -> Box<dyn DynAstExt>

Clone into a fresh box — the object-safe stand-in for Clone (whose Self-returning signature cannot go through a vtable).
Source§

fn dyn_eq(&self, other: &dyn DynAstExt) -> bool

Structural equality against another erased node — the object-safe stand-in for PartialEq (whose &Self argument cannot go through a vtable). Equal iff other holds the same concrete type and that type deems the values equal; differently-typed nodes are never equal.
Source§

fn dyn_hash(&self, state: &mut dyn Hasher)

Feed this node’s hash into an erased hasher — the object-safe stand-in for Hash::hash (whose generic H: Hasher cannot go through a vtable).
Source§

impl<T> Extension for T
where T: Clone + Debug + Eq + Hash + Spanned,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> RenderExt for T
where T: Render,

Source§

fn displayed<'a>(&'a self, ctx: &'a RenderCtx<'a>) -> Displayed<'a, T>

Pair this node with an explicit canonical RenderCtx so format!, to_string, and {} render it. This is the canonical path: the ctx’s resolver and source must match the node’s parse.
Source§

fn debug_sql<'a>(&'a self, resolver: &'a dyn Resolver) -> DebugSql<'a, Self>
where Self: Sized,

Render this node for debugging against an explicitly-supplied resolver (the debug-SQL mitigation), returning a Display adapter. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.