Skip to content

Commit 791e283

Browse files
committed
Update spec and parser to use VALUES instead of RECORDS for INSERT
1 parent c4309b5 commit 791e283

2 files changed

Lines changed: 5 additions & 13 deletions

File tree

specs/query-language.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ The `INSERT` statement is used to add new documents to a collection.
1616

1717
```sql
1818
INSERT INTO <collection_name>
19-
RECORDS `json_object` [, `json_object` ...]
19+
VALUES `json_object` [, `json_object` ...]
2020
```
2121

2222
**Parameters:**
@@ -28,7 +28,7 @@ RECORDS `json_object` [, `json_object` ...]
2828

2929
```sql
3030
INSERT INTO people
31-
RECORDS `{"name": "Alice", "age": 30, "address": {"city": "Paris", "zip": "75001"}}`
31+
VALUES `{"name": "Alice", "age": 30, "address": {"city": "Paris", "zip": "75001"}}`
3232
```
3333

3434
### SELECT

src/parser.rs

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,7 @@ impl Dialect for ArgusDialect {
2727
pub fn parse(sql: &str) -> Result<Statement, String> {
2828
let dialect = ArgusDialect {};
2929

30-
// Hack: Replace RECORDS with VALUES to satisfy sqlparser
31-
// We strictly assume "RECORDS" is used for INSERT.
32-
let sql_to_parse = if sql.trim().to_uppercase().starts_with("INSERT") {
33-
sql.replacen("RECORDS", "VALUES", 1).replacen("records", "VALUES", 1)
34-
} else {
35-
sql.to_string()
36-
};
37-
38-
let ast = Parser::parse_sql(&dialect, &sql_to_parse).map_err(|e| e.to_string())?;
30+
let ast = Parser::parse_sql(&dialect, sql).map_err(|e| e.to_string())?;
3931

4032
if ast.len() != 1 {
4133
return Err("Expected exactly one statement".to_string());
@@ -78,7 +70,7 @@ fn convert_insert_source(source: &Option<Box<ast::Query>>) -> Result<Vec<Value>,
7870
}
7971
Ok(docs)
8072
}
81-
_ => Err("INSERT expects VALUES (RECORDS) clause".to_string()),
73+
_ => Err("INSERT expects VALUES clause".to_string()),
8274
}
8375
}
8476

@@ -244,7 +236,7 @@ mod tests {
244236

245237
#[test]
246238
fn test_parse_insert() {
247-
let sql = r#"INSERT INTO users RECORDS `{"name": "Alice", "age": 30}`, `{"name": "Bob"}`"#;
239+
let sql = r#"INSERT INTO users VALUES `{"name": "Alice", "age": 30}`, `{"name": "Bob"}`"#;
248240
let stmt = parse(sql).unwrap();
249241
match stmt {
250242
Statement::Insert { collection, documents } => {

0 commit comments

Comments
 (0)