Allow multiple table types in DEFINE FIELD record definition

Closes #15
This commit is contained in:
Tobie Morgan Hitchcock 2022-08-04 15:12:06 +01:00
parent 1869e1ddbc
commit 96225afb44

View file

@ -1,11 +1,12 @@
use crate::sql::comment::mightbespace; use crate::sql::comment::mightbespace;
use crate::sql::common::commas;
use crate::sql::error::IResult; use crate::sql::error::IResult;
use crate::sql::table::{table, Table}; use crate::sql::table::{table, Table};
use nom::branch::alt; use nom::branch::alt;
use nom::bytes::complete::tag; use nom::bytes::complete::tag;
use nom::character::complete::char; use nom::character::complete::char;
use nom::combinator::map; use nom::combinator::map;
use nom::multi::many1; use nom::multi::separated_list1;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::fmt; use std::fmt;
@ -82,7 +83,7 @@ fn record(i: &str) -> IResult<&str, Vec<Table>> {
let (i, _) = tag("record")(i)?; let (i, _) = tag("record")(i)?;
let (i, _) = mightbespace(i)?; let (i, _) = mightbespace(i)?;
let (i, _) = char('(')(i)?; let (i, _) = char('(')(i)?;
let (i, v) = many1(table)(i)?; let (i, v) = separated_list1(commas, table)(i)?;
let (i, _) = char(')')(i)?; let (i, _) = char(')')(i)?;
Ok((i, v)) Ok((i, v))
} }
@ -91,7 +92,9 @@ fn geometry(i: &str) -> IResult<&str, Vec<String>> {
let (i, _) = tag("geometry")(i)?; let (i, _) = tag("geometry")(i)?;
let (i, _) = mightbespace(i)?; let (i, _) = mightbespace(i)?;
let (i, _) = char('(')(i)?; let (i, _) = char('(')(i)?;
let (i, v) = many1(map( let (i, v) = separated_list1(
commas,
map(
alt(( alt((
tag("feature"), tag("feature"),
tag("point"), tag("point"),
@ -103,7 +106,8 @@ fn geometry(i: &str) -> IResult<&str, Vec<String>> {
tag("collection"), tag("collection"),
)), )),
String::from, String::from,
))(i)?; ),
)(i)?;
let (i, _) = char(')')(i)?; let (i, _) = char(')')(i)?;
Ok((i, v)) Ok((i, v))
} }