mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-10-16 08:49:13 +00:00
adding delimited (#1155)
This commit is contained in:
parent
fb7d4d40cc
commit
6f090e5547
4 changed files with 148 additions and 3 deletions
|
@ -4405,7 +4405,92 @@ impl<'a> Parser<'a> {
|
|||
let class = self.parse_literal_string()?;
|
||||
Ok(HiveRowFormat::SERDE { class })
|
||||
}
|
||||
_ => Ok(HiveRowFormat::DELIMITED),
|
||||
_ => {
|
||||
let mut row_delimiters = vec![];
|
||||
|
||||
loop {
|
||||
match self.parse_one_of_keywords(&[
|
||||
Keyword::FIELDS,
|
||||
Keyword::COLLECTION,
|
||||
Keyword::MAP,
|
||||
Keyword::LINES,
|
||||
Keyword::NULL,
|
||||
]) {
|
||||
Some(Keyword::FIELDS) => {
|
||||
if self.parse_keywords(&[Keyword::TERMINATED, Keyword::BY]) {
|
||||
row_delimiters.push(HiveRowDelimiter {
|
||||
delimiter: HiveDelimiter::FieldsTerminatedBy,
|
||||
char: self.parse_identifier(false)?,
|
||||
});
|
||||
|
||||
if self.parse_keywords(&[Keyword::ESCAPED, Keyword::BY]) {
|
||||
row_delimiters.push(HiveRowDelimiter {
|
||||
delimiter: HiveDelimiter::FieldsEscapedBy,
|
||||
char: self.parse_identifier(false)?,
|
||||
});
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
Some(Keyword::COLLECTION) => {
|
||||
if self.parse_keywords(&[
|
||||
Keyword::ITEMS,
|
||||
Keyword::TERMINATED,
|
||||
Keyword::BY,
|
||||
]) {
|
||||
row_delimiters.push(HiveRowDelimiter {
|
||||
delimiter: HiveDelimiter::CollectionItemsTerminatedBy,
|
||||
char: self.parse_identifier(false)?,
|
||||
});
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
Some(Keyword::MAP) => {
|
||||
if self.parse_keywords(&[
|
||||
Keyword::KEYS,
|
||||
Keyword::TERMINATED,
|
||||
Keyword::BY,
|
||||
]) {
|
||||
row_delimiters.push(HiveRowDelimiter {
|
||||
delimiter: HiveDelimiter::MapKeysTerminatedBy,
|
||||
char: self.parse_identifier(false)?,
|
||||
});
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
Some(Keyword::LINES) => {
|
||||
if self.parse_keywords(&[Keyword::TERMINATED, Keyword::BY]) {
|
||||
row_delimiters.push(HiveRowDelimiter {
|
||||
delimiter: HiveDelimiter::LinesTerminatedBy,
|
||||
char: self.parse_identifier(false)?,
|
||||
});
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
Some(Keyword::NULL) => {
|
||||
if self.parse_keywords(&[Keyword::DEFINED, Keyword::AS]) {
|
||||
row_delimiters.push(HiveRowDelimiter {
|
||||
delimiter: HiveDelimiter::NullDefinedAs,
|
||||
char: self.parse_identifier(false)?,
|
||||
});
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Ok(HiveRowFormat::DELIMITED {
|
||||
delimiters: row_delimiters,
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue