limbo_sqlite3_parser/to_sql_string/stmt/
create_virtual_table.rs1use crate::{ast, to_sql_string::ToSqlString};
2
3impl ToSqlString for ast::CreateVirtualTable {
4 fn to_sql_string<C: crate::to_sql_string::ToSqlContext>(&self, context: &C) -> String {
5 format!(
6 "CREATE VIRTUAL TABLE {}{} USING {}{};",
7 self.if_not_exists.then_some("IF NOT EXISTS ").unwrap_or(""),
8 self.tbl_name.to_sql_string(context),
9 self.module_name.0,
10 self.args
11 .as_ref()
12 .map_or("".to_string(), |args| format!("({})", args.join(", ")))
13 )
14 }
15}
16
17#[cfg(test)]
18mod tests {
19 use crate::to_sql_string_test;
20
21 to_sql_string_test!(
22 test_create_virtual_table_fts5_basic,
23 "CREATE VIRTUAL TABLE docs USING fts5(title, content);"
24 );
25
26 to_sql_string_test!(
27 test_create_virtual_table_fts5_tokenizer,
28 "CREATE VIRTUAL TABLE docs USING fts5(title, content, tokenize = 'porter');"
29 );
30
31 to_sql_string_test!(
32 test_create_virtual_table_fts5_unindexed,
33 "CREATE VIRTUAL TABLE docs USING fts5(title, content, metadata UNINDEXED);"
34 );
35
36 to_sql_string_test!(
37 test_create_virtual_table_fts5_prefix,
38 "CREATE VIRTUAL TABLE docs USING fts5(title, content, tokenize = 'unicode61', prefix = '2 4');"
39 );
40
41 to_sql_string_test!(
42 test_create_virtual_table_fts5_contentless,
43 "CREATE VIRTUAL TABLE docs USING fts5(title, content, content = '');"
44 );
45
46 to_sql_string_test!(
47 test_create_virtual_table_fts5_external_content,
48 "CREATE VIRTUAL TABLE docs_fts USING fts5(title, content, content = 'documents');"
49 );
50
51 to_sql_string_test!(
52 test_create_virtual_table_rtree,
53 "CREATE VIRTUAL TABLE geo USING rtree(id, min_x, max_x, min_y, max_y);"
54 );
55
56 to_sql_string_test!(
57 test_create_virtual_table_rtree_aux,
58 "CREATE VIRTUAL TABLE geo USING rtree(id, min_x, max_x, min_y, max_y, +name TEXT, +category INTEGER);"
59 );
60
61 to_sql_string_test!(
62 test_create_virtual_table_if_not_exists,
63 "CREATE VIRTUAL TABLE IF NOT EXISTS docs USING fts5(title, content);"
64 );
65
66 to_sql_string_test!(
67 test_create_virtual_table_fts4,
68 "CREATE VIRTUAL TABLE docs USING fts4(title, content, matchinfo = 'fts3');"
69 );
70
71 to_sql_string_test!(
72 test_create_virtual_table_fts5_detail,
73 "CREATE VIRTUAL TABLE docs USING fts5(title, body TEXT, detail = 'none');"
74 );
75
76 to_sql_string_test!(
77 test_create_virtual_table_schema,
78 "CREATE VIRTUAL TABLE main.docs USING fts5(title, content);"
79 );
80}