MCPcopy Create free account
hub / github.com/MaterializeInc/materialize / parse_format

Method parse_format

src/sql-parser/src/parser.rs:2157–2202  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

2155 }
2156
2157 fn parse_format(&mut self) -> Result<Format<Raw>, ParserError> {
2158 let format = if self.parse_keyword(AVRO) {
2159 self.expect_keyword(USING)?;
2160 Format::Avro(self.parse_avro_schema()?)
2161 } else if self.parse_keyword(PROTOBUF) {
2162 Format::Protobuf(self.parse_protobuf_schema()?)
2163 } else if self.parse_keyword(REGEX) {
2164 let regex = self.parse_literal_string()?;
2165 Format::Regex(regex)
2166 } else if self.parse_keyword(CSV) {
2167 self.expect_keyword(WITH)?;
2168 let columns = if self.parse_keyword(HEADER) || self.parse_keyword(HEADERS) {
2169 CsvColumns::Header {
2170 names: self.parse_parenthesized_column_list(Mandatory)?,
2171 }
2172 } else {
2173 let n_cols = self.parse_literal_uint()?;
2174 self.expect_keyword(COLUMNS)?;
2175 CsvColumns::Count(n_cols)
2176 };
2177 let delimiter = if self.parse_keywords(&[DELIMITED, BY]) {
2178 let s = self.parse_literal_string()?;
2179 match s.len() {
2180 1 => Ok(s.chars().next().unwrap()),
2181 _ => self.expected(self.peek_pos(), "one-character string", self.peek_token()),
2182 }?
2183 } else {
2184 ','
2185 };
2186 Format::Csv { columns, delimiter }
2187 } else if self.parse_keyword(JSON) {
2188 let array = self.parse_keyword(ARRAY);
2189 Format::Json { array }
2190 } else if self.parse_keyword(TEXT) {
2191 Format::Text
2192 } else if self.parse_keyword(BYTES) {
2193 Format::Bytes
2194 } else {
2195 return self.expected(
2196 self.peek_pos(),
2197 "AVRO, PROTOBUF, REGEX, CSV, JSON, TEXT, or BYTES",
2198 self.peek_token(),
2199 );
2200 };
2201 Ok(format)
2202 }
2203
2204 fn parse_avro_schema(&mut self) -> Result<AvroSchema<Raw>, ParserError> {
2205 let avro_schema = if self.parse_keywords(&[CONFLUENT, SCHEMA, REGISTRY]) {

Callers 3

parse_create_sourceMethod · 0.80

Calls 15

parse_keywordMethod · 0.80
expect_keywordMethod · 0.80
parse_avro_schemaMethod · 0.80
parse_protobuf_schemaMethod · 0.80
parse_literal_stringMethod · 0.80
parse_literal_uintMethod · 0.80
parse_keywordsMethod · 0.80
unwrapMethod · 0.80
expectedMethod · 0.80
peek_posMethod · 0.80
peek_tokenMethod · 0.80

Tested by

no test coverage detected