sqlite_xsv/
lib.rs

1mod field_at;
2mod meta;
3mod util;
4mod xsv;
5mod xsv_reader;
6
7use crate::{
8    //field_at::xsv_field_at,
9    meta::{xsv_debug, xsv_version},
10    xsv::XsvTable,
11    xsv_reader::XsvReaderTable,
12};
13use sqlite_loadable::prelude::*;
14use sqlite_loadable::{define_scalar_function, define_virtual_table, FunctionFlags, Result};
15
16#[sqlite_entrypoint]
17pub fn sqlite3_xsv_init(db: *mut sqlite3) -> Result<()> {
18    let comma = b',';
19    let tab = b'\t';
20
21    define_scalar_function(
22        db,
23        "xsv_version",
24        0,
25        xsv_version,
26        FunctionFlags::DETERMINISTIC,
27    )?;
28    define_scalar_function(db, "xsv_debug", 0, xsv_debug, FunctionFlags::DETERMINISTIC)?;
29
30    define_virtual_table::<XsvTable>(db, "xsv", None)?;
31    define_virtual_table::<XsvTable>(db, "csv", Some(comma))?;
32    define_virtual_table::<XsvTable>(db, "tsv", Some(tab))?;
33
34    define_virtual_table::<XsvReaderTable>(db, "xsv_reader", None)?;
35    define_virtual_table::<XsvReaderTable>(db, "csv_reader", Some(comma))?;
36    define_virtual_table::<XsvReaderTable>(db, "tsv_reader", Some(tab))?;
37
38    // TODO re-add field_at and _records
39    //let flags = FunctionFlags::UTF8 | FunctionFlags::DETERMINISTIC;
40    //define_scalar_function_with_aux(db, "csv_field_at", 2, xsv_field_at, flags, Some(comma))?;
41    //define_scalar_function_with_aux(db, "tsv_field_at", 2, xsv_field_at, flags, Some(tab))?;
42    //define_scalar_function_with_aux(db, "xsv_field_at", 3, xsv_field_at, flags, None)?;
43
44    Ok(())
45}