2c293e7f60
Per amended DESIGN.md 9.2, an episode row now also requires at least one query token to match the episode title on its own, so a series-title-only query lists the series and no episodes.
63 lines
1.8 KiB
JSON
63 lines
1.8 KiB
JSON
{
|
|
"db_name": "SQLite",
|
|
"query": "SELECT e.id AS \"episode_id!: i64\", s.id AS \"series_id!: i64\", s.title AS \"series_title!: String\", printf('S%02dE%02d', se.number, e.number) AS \"tag!: String\", e.title AS \"title!: String\", s.poster_path, s.vote_average, s.tmdb_id AS \"series_tmdb_id!: i64\" FROM episodes e JOIN seasons se ON se.id = e.season_id JOIN series s ON s.id = se.series_id WHERE NOT EXISTS (SELECT 1 FROM json_each(?) token WHERE (s.title || ' ' || e.title) NOT LIKE '%' || token.value || '%' ESCAPE '\\') AND EXISTS (SELECT 1 FROM json_each(?) token WHERE e.title LIKE '%' || token.value || '%' ESCAPE '\\') ORDER BY s.title, se.number, e.number, e.id",
|
|
"describe": {
|
|
"columns": [
|
|
{
|
|
"name": "episode_id!: i64",
|
|
"ordinal": 0,
|
|
"type_info": "Integer"
|
|
},
|
|
{
|
|
"name": "series_id!: i64",
|
|
"ordinal": 1,
|
|
"type_info": "Integer"
|
|
},
|
|
{
|
|
"name": "series_title!: String",
|
|
"ordinal": 2,
|
|
"type_info": "Text"
|
|
},
|
|
{
|
|
"name": "tag!: String",
|
|
"ordinal": 3,
|
|
"type_info": "Null"
|
|
},
|
|
{
|
|
"name": "title!: String",
|
|
"ordinal": 4,
|
|
"type_info": "Text"
|
|
},
|
|
{
|
|
"name": "poster_path",
|
|
"ordinal": 5,
|
|
"type_info": "Text"
|
|
},
|
|
{
|
|
"name": "vote_average",
|
|
"ordinal": 6,
|
|
"type_info": "Float"
|
|
},
|
|
{
|
|
"name": "series_tmdb_id!: i64",
|
|
"ordinal": 7,
|
|
"type_info": "Integer"
|
|
}
|
|
],
|
|
"parameters": {
|
|
"Right": 2
|
|
},
|
|
"nullable": [
|
|
true,
|
|
false,
|
|
false,
|
|
null,
|
|
false,
|
|
true,
|
|
true,
|
|
false
|
|
]
|
|
},
|
|
"hash": "80399f9c14b159b5c4883aaeae370a7869d1104dfd80dc3a568ef134c4659ca9"
|
|
}
|