## `sqlite-xsv` Documentation ## A note on the `temp.table` convention Examples in this page will prefix new virtual tables with `temp.`, such as: ```sql create virtual table temp.students using csv(filename="students.csv"); ``` This is because it is recommended, though not required, to create CSV virtual tables in the `TEMP` schema. That way, the table only lasts for the lifetime of your database connection, and not persisted into any connected database. If you want to persistent _data_ from a CSV file, you can simply create a new traditional table with the same contents as the temp CSV virtual table, like so. ```sql create table students as select * from temp.students; ``` If you were to create a persistent CSV virtual table by omitting `temp.`, it will still work just fine. But, you'll need to ensure that other future clients and connections that use that database and query the virtual table have both the `sqlite-xsv` extension loaded, as well as the seperate CSV file in the same location as referenced in the `filename=` argument. If you're alright with that, then creating non-temp CSV virtual tables would work just fine! ## API Reference

xsv_version()

Results a version string of the current version of `sqlite-xsv`. ```sql select xsv_version(); -- "v0.1.0" ```

xsv_debug()

Returns a string of various debug information for xsv. ```sql select xsv_debug(); -- "" ```

xsv(filename)

A virtual table for reading data from Possible arguments in the constructor include: - `filename` - Required string, path of the CSV file to read data from. - `delimiter` - Required character, which delimiter to use to seperate fields (see [`csv`](#csv) and [`tsv`](#tsv)). - `header` - Optional boolean, whether the 1st row in the file contains column names. - `quote` - Optional character, a different quote character to use to escape fields, default's to `"` (double quote). ```sql create virtual table students using xsv( filename="students.psv", delimiter="|", quote="'", header=false ); ``` By default, `xsv` will read the first row in the given file and use those as column names, with values defaulted to `TEXT`. To use different column names, or to specify different types for different values, you can provide column declarations directly in the constructor. `sqlite-xsv` will apply [type affinity](https://www.sqlite.org/datatype3.html#type_affinity) to the values ```sql create virtual table temp.students using xsv( filename="students.csv", delimiter=",", Name text, Age integer, Zipcode text, Progress real ); select * from temp.students; ``` If your CSV lacks headers, be sure to pass in `header=false` so `sqlite-xsv` won't skip the first row.

csv(filename, [])

Same as the [xsv virtual table](#xsv), but defaulted with a comma delimiter (`delimiter=","`). `filename` is still required, other parameters and column declarations are optional. ```sql create virtual table temp.students using csv( filename="students.csv" ); select * from temp.students; ```

tsv()

Same as the [xsv virtual table](#xsv), but defaulted with a comma delimiter (`delimiter="\t"`). `filename` is still required, other parameters and column declarations are optional. ```sql create virtual table temp.students using tsv( filename="students.tsv" ); select * from temp.students; ```

xsv_reader(schema)

Similar to the `xsv` virtual table, but does not take in a `filename` parameter. Instead, column declarations are required, and the data source (filename, BLOBs, etc.) is provided at runtime. This offers a more flexible API, say when you want to query multiple CSV files with all the same schema, or when using other SQL extensions like [`sqlite-http`](https://github.com/asg017/sqlite-http) to query CSVs from other places. - `delimiter` - Required character, . - `header` - Optional boolean, . - `quote` - Option character, . ```sql create virtual table temp.students_reader using xsv_reader( delimiter="|", id text, name text, age int, progress real ); select * from temp.reader('file1.psv'); select * from temp.reader('file2.psv'); select * from temp.reader(func_returning_blob()); ```

csv_reader(filename, [])

Same as the [`xsv_reader` virtual table](#xsv_reader), but defaulted with a comma delimiter (`delimiter=","`). ```sql create virtual table temp.students_reader using csv_reader( id text, name text, age int, progress real ); select * from temp.students_reader('file1.csv'); select * from temp.students_reader('file2.csv'); ```

tsv_reader()

Same as the [`xsv_reader` virtual table](#xsv_reader), but defaulted with a tab delimiter (`delimiter="\t"`). ```sql create virtual table temp.students_reader using tsv_reader( id text, name text, age int, progress real ); select * from temp.students_reader('file1.tsv'); select * from temp.students_reader('file2.tsv'); ```