| DROP TABLE IF EXISTS definitions; |
| DROP VIEW IF EXISTS v_definitions; |
|
|
| CREATE TABLE definitions AS |
| WITH entries AS ( |
| SELECT |
| lower(lexeme) as lexeme, |
| unnest(from_json(api_response, '["json"]')) as entry, |
| generate_subscripts(from_json(api_response, '["json"]'), 1) - 1 as entry_idx |
| FROM definitions_raw |
| WHERE status = 'success' |
| ), |
| meanings AS ( |
| SELECT |
| lexeme, entry_idx, |
| unnest(from_json(json_extract(entry, '$.meanings'), '["json"]')) as meaning, |
| generate_subscripts(from_json(json_extract(entry, '$.meanings'), '["json"]'), 1) - 1 as meaning_idx |
| FROM entries |
| ), |
| defs AS ( |
| SELECT |
| lexeme, entry_idx, meaning_idx, |
| json_extract_string(meaning, '$.partOfSpeech') as part_of_speech, |
| unnest(from_json(json_extract(meaning, '$.definitions'), '["json"]')) as def, |
| generate_subscripts(from_json(json_extract(meaning, '$.definitions'), '["json"]'), 1) - 1 as def_idx |
| FROM meanings |
| ) |
| SELECT |
| lexeme, |
| json_extract_string(def, '$.definition') as definition, |
| part_of_speech, |
| entry_idx, |
| meaning_idx, |
| def_idx |
| FROM defs |
| WHERE json_extract_string(def, '$.definition') IS NOT NULL |
|
|