From 12fd8c83b4f320caa98bdcb273c2b2ea3cd57a04 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 6 Mar 2026 12:20:07 +0000 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=E5=90=8D=E5=89=8D=E6=A4=9C=E7=B4=A2?= =?UTF-8?q?RPC=E3=82=92case-insensitive=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit get_stations_by_nameクエリのLIKEをILIKEに変更し、 ローマ字(station_name_rn)等の大文字小文字を区別せずに検索できるようにした。 https://claude.ai/code/session_01B3dLcBJ9hv2Njw6RXD1kwP --- ...486e92bbc17f967b74f164dc09b701ffaafd5b3fbca2f.json} | 4 ++-- stationapi/src/infrastructure/station_repository.rs | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) rename .sqlx/{query-16b301ca5df4be89b803987fd71cc41b55e885ccd4bd3ca4bcae1f7336742d3f.json => query-b67aedd7a4dddd9b30b486e92bbc17f967b74f164dc09b701ffaafd5b3fbca2f.json} (89%) diff --git a/.sqlx/query-16b301ca5df4be89b803987fd71cc41b55e885ccd4bd3ca4bcae1f7336742d3f.json b/.sqlx/query-b67aedd7a4dddd9b30b486e92bbc17f967b74f164dc09b701ffaafd5b3fbca2f.json similarity index 89% rename from .sqlx/query-16b301ca5df4be89b803987fd71cc41b55e885ccd4bd3ca4bcae1f7336742d3f.json rename to .sqlx/query-b67aedd7a4dddd9b30b486e92bbc17f967b74f164dc09b701ffaafd5b3fbca2f.json index 0d154880..3788e882 100644 --- a/.sqlx/query-16b301ca5df4be89b803987fd71cc41b55e885ccd4bd3ca4bcae1f7336742d3f.json +++ b/.sqlx/query-b67aedd7a4dddd9b30b486e92bbc17f967b74f164dc09b701ffaafd5b3fbca2f.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "WITH from_stations AS (\n SELECT\n s.station_cd,\n s.line_cd\n FROM stations AS s\n WHERE s.station_g_cd = $1\n AND s.e_status = 0\n ),\n filtered AS (\n SELECT DISTINCT ON (s.station_cd)\n s.station_cd,\n s.station_g_cd,\n s.station_name,\n s.station_name_k,\n s.station_name_r,\n s.station_name_rn,\n s.station_name_zh,\n s.station_name_ko,\n s.station_number1,\n s.station_number2,\n s.station_number3,\n s.station_number4,\n s.three_letter_code,\n s.line_cd,\n s.pref_cd,\n s.post,\n s.address,\n s.lon,\n s.lat,\n s.open_ymd,\n s.close_ymd,\n s.e_status,\n s.e_sort,\n l.company_cd,\n COALESCE(NULLIF(COALESCE(a.line_name, l.line_name), ''), NULL) AS line_name,\n COALESCE(NULLIF(COALESCE(a.line_name_k, l.line_name_k), ''), NULL) AS line_name_k,\n COALESCE(NULLIF(COALESCE(a.line_name_h, l.line_name_h), ''), NULL) AS line_name_h,\n COALESCE(NULLIF(COALESCE(a.line_name_r, l.line_name_r), ''), NULL) AS line_name_r,\n COALESCE(NULLIF(COALESCE(a.line_name_zh, l.line_name_zh), ''), NULL) AS line_name_zh,\n COALESCE(NULLIF(COALESCE(a.line_name_ko, l.line_name_ko), ''), NULL) AS line_name_ko,\n COALESCE(NULLIF(COALESCE(a.line_color_c, l.line_color_c), ''), NULL) AS line_color_c,\n l.line_type,\n l.line_symbol1,\n l.line_symbol2,\n l.line_symbol3,\n l.line_symbol4,\n l.line_symbol1_color,\n l.line_symbol2_color,\n l.line_symbol3_color,\n l.line_symbol4_color,\n l.line_symbol1_shape,\n l.line_symbol2_shape,\n l.line_symbol3_shape,\n l.line_symbol4_shape,\n COALESCE(l.average_distance, 0.0)::DOUBLE PRECISION AS average_distance,\n COALESCE(from_sst.line_group_cd, NULL)::int AS line_group_cd, -- has_train_types用\n NULL::int AS type_id,\n NULL::int AS sst_id,\n NULL::int AS type_cd,\n NULL::int AS pass,\n NULL::text AS type_name,\n NULL::text AS type_name_k,\n NULL::text AS type_name_r,\n NULL::text AS type_name_zh,\n NULL::text AS type_name_ko,\n NULL::text AS color,\n NULL::int AS direction,\n NULL::int AS kind,\n s.transport_type\n FROM stations AS s\n LEFT JOIN from_stations AS fs\n ON fs.station_cd IS NOT NULL\n LEFT JOIN station_station_types AS from_sst\n ON from_sst.station_cd = fs.station_cd\n LEFT JOIN station_station_types AS dst_sst\n ON dst_sst.station_cd = s.station_cd\n LEFT JOIN types AS t\n ON t.type_cd = dst_sst.type_cd\n LEFT JOIN line_aliases AS la\n ON la.station_cd = s.station_cd\n LEFT JOIN aliases AS a\n ON la.alias_cd = a.id\n JOIN lines AS l\n ON l.line_cd = s.line_cd\n AND l.e_status = 0\n WHERE\n (\n s.station_name LIKE $2\n OR s.station_name_rn LIKE $3\n OR s.station_name_k LIKE $4\n OR s.station_name_zh LIKE $5\n OR s.station_name_ko LIKE $6\n )\n AND s.e_status = 0\n AND ($8::int IS NULL OR COALESCE(s.transport_type, 0) = $8)\n AND (\n (\n from_sst.id IS NOT NULL\n AND dst_sst.id IS NOT NULL\n AND from_sst.line_group_cd = dst_sst.line_group_cd\n AND dst_sst.pass <> 1\n )\n OR\n (\n (from_sst.id IS NULL OR dst_sst.id IS NULL)\n AND s.line_cd = COALESCE(fs.line_cd, s.line_cd)\n )\n )\n ORDER BY s.station_cd, s.station_g_cd, s.station_name\n )\n SELECT *\n FROM filtered\n ORDER BY station_g_cd, station_name\n LIMIT $7", + "query": "WITH from_stations AS (\n SELECT\n s.station_cd,\n s.line_cd\n FROM stations AS s\n WHERE s.station_g_cd = $1\n AND s.e_status = 0\n ),\n filtered AS (\n SELECT DISTINCT ON (s.station_cd)\n s.station_cd,\n s.station_g_cd,\n s.station_name,\n s.station_name_k,\n s.station_name_r,\n s.station_name_rn,\n s.station_name_zh,\n s.station_name_ko,\n s.station_number1,\n s.station_number2,\n s.station_number3,\n s.station_number4,\n s.three_letter_code,\n s.line_cd,\n s.pref_cd,\n s.post,\n s.address,\n s.lon,\n s.lat,\n s.open_ymd,\n s.close_ymd,\n s.e_status,\n s.e_sort,\n l.company_cd,\n COALESCE(NULLIF(COALESCE(a.line_name, l.line_name), ''), NULL) AS line_name,\n COALESCE(NULLIF(COALESCE(a.line_name_k, l.line_name_k), ''), NULL) AS line_name_k,\n COALESCE(NULLIF(COALESCE(a.line_name_h, l.line_name_h), ''), NULL) AS line_name_h,\n COALESCE(NULLIF(COALESCE(a.line_name_r, l.line_name_r), ''), NULL) AS line_name_r,\n COALESCE(NULLIF(COALESCE(a.line_name_zh, l.line_name_zh), ''), NULL) AS line_name_zh,\n COALESCE(NULLIF(COALESCE(a.line_name_ko, l.line_name_ko), ''), NULL) AS line_name_ko,\n COALESCE(NULLIF(COALESCE(a.line_color_c, l.line_color_c), ''), NULL) AS line_color_c,\n l.line_type,\n l.line_symbol1,\n l.line_symbol2,\n l.line_symbol3,\n l.line_symbol4,\n l.line_symbol1_color,\n l.line_symbol2_color,\n l.line_symbol3_color,\n l.line_symbol4_color,\n l.line_symbol1_shape,\n l.line_symbol2_shape,\n l.line_symbol3_shape,\n l.line_symbol4_shape,\n COALESCE(l.average_distance, 0.0)::DOUBLE PRECISION AS average_distance,\n COALESCE(from_sst.line_group_cd, NULL)::int AS line_group_cd, -- has_train_types用\n NULL::int AS type_id,\n NULL::int AS sst_id,\n NULL::int AS type_cd,\n NULL::int AS pass,\n NULL::text AS type_name,\n NULL::text AS type_name_k,\n NULL::text AS type_name_r,\n NULL::text AS type_name_zh,\n NULL::text AS type_name_ko,\n NULL::text AS color,\n NULL::int AS direction,\n NULL::int AS kind,\n s.transport_type\n FROM stations AS s\n LEFT JOIN from_stations AS fs\n ON fs.station_cd IS NOT NULL\n LEFT JOIN station_station_types AS from_sst\n ON from_sst.station_cd = fs.station_cd\n LEFT JOIN station_station_types AS dst_sst\n ON dst_sst.station_cd = s.station_cd\n LEFT JOIN types AS t\n ON t.type_cd = dst_sst.type_cd\n LEFT JOIN line_aliases AS la\n ON la.station_cd = s.station_cd\n LEFT JOIN aliases AS a\n ON la.alias_cd = a.id\n JOIN lines AS l\n ON l.line_cd = s.line_cd\n AND l.e_status = 0\n WHERE\n (\n s.station_name ILIKE $2\n OR s.station_name_rn ILIKE $3\n OR s.station_name_k ILIKE $4\n OR s.station_name_zh ILIKE $5\n OR s.station_name_ko ILIKE $6\n )\n AND s.e_status = 0\n AND ($8::int IS NULL OR COALESCE(s.transport_type, 0) = $8)\n AND (\n (\n from_sst.id IS NOT NULL\n AND dst_sst.id IS NOT NULL\n AND from_sst.line_group_cd = dst_sst.line_group_cd\n AND dst_sst.pass <> 1\n )\n OR\n (\n (from_sst.id IS NULL OR dst_sst.id IS NULL)\n AND s.line_cd = COALESCE(fs.line_cd, s.line_cd)\n )\n )\n ORDER BY s.station_cd, s.station_g_cd, s.station_name\n )\n SELECT *\n FROM filtered\n ORDER BY station_g_cd, station_name\n LIMIT $7", "describe": { "columns": [ { @@ -373,5 +373,5 @@ false ] }, - "hash": "16b301ca5df4be89b803987fd71cc41b55e885ccd4bd3ca4bcae1f7336742d3f" + "hash": "b67aedd7a4dddd9b30b486e92bbc17f967b74f164dc09b701ffaafd5b3fbca2f" } diff --git a/stationapi/src/infrastructure/station_repository.rs b/stationapi/src/infrastructure/station_repository.rs index d1615b68..d29e7430 100644 --- a/stationapi/src/infrastructure/station_repository.rs +++ b/stationapi/src/infrastructure/station_repository.rs @@ -1222,11 +1222,11 @@ impl InternalStationRepository { AND l.e_status = 0 WHERE ( - s.station_name LIKE $2 - OR s.station_name_rn LIKE $3 - OR s.station_name_k LIKE $4 - OR s.station_name_zh LIKE $5 - OR s.station_name_ko LIKE $6 + s.station_name ILIKE $2 + OR s.station_name_rn ILIKE $3 + OR s.station_name_k ILIKE $4 + OR s.station_name_zh ILIKE $5 + OR s.station_name_ko ILIKE $6 ) AND s.e_status = 0 AND ($8::int IS NULL OR COALESCE(s.transport_type, 0) = $8) From a917ea454c00613edb4d710efdf5f6624c6b7df1 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 6 Mar 2026 12:21:07 +0000 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20ILIKE=E3=82=92station=5Fname=5Frn?= =?UTF-8?q?=E3=81=AE=E3=81=BF=E3=81=AB=E9=99=90=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 日本語・中国語・韓国語カラムにはcase-insensitive比較は不要なため、 ILIKEはローマ字カラム(station_name_rn)のみに適用し、 他のカラムはLIKEに戻した。 https://claude.ai/code/session_01B3dLcBJ9hv2Njw6RXD1kwP --- ...3cda87863b73fef621d587a5056b9f8f4bf96fcd77ae1017.json} | 4 ++-- stationapi/src/infrastructure/station_repository.rs | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) rename .sqlx/{query-b67aedd7a4dddd9b30b486e92bbc17f967b74f164dc09b701ffaafd5b3fbca2f.json => query-5f4de4e07d61f2163cda87863b73fef621d587a5056b9f8f4bf96fcd77ae1017.json} (89%) diff --git a/.sqlx/query-b67aedd7a4dddd9b30b486e92bbc17f967b74f164dc09b701ffaafd5b3fbca2f.json b/.sqlx/query-5f4de4e07d61f2163cda87863b73fef621d587a5056b9f8f4bf96fcd77ae1017.json similarity index 89% rename from .sqlx/query-b67aedd7a4dddd9b30b486e92bbc17f967b74f164dc09b701ffaafd5b3fbca2f.json rename to .sqlx/query-5f4de4e07d61f2163cda87863b73fef621d587a5056b9f8f4bf96fcd77ae1017.json index 3788e882..3d2650ed 100644 --- a/.sqlx/query-b67aedd7a4dddd9b30b486e92bbc17f967b74f164dc09b701ffaafd5b3fbca2f.json +++ b/.sqlx/query-5f4de4e07d61f2163cda87863b73fef621d587a5056b9f8f4bf96fcd77ae1017.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "WITH from_stations AS (\n SELECT\n s.station_cd,\n s.line_cd\n FROM stations AS s\n WHERE s.station_g_cd = $1\n AND s.e_status = 0\n ),\n filtered AS (\n SELECT DISTINCT ON (s.station_cd)\n s.station_cd,\n s.station_g_cd,\n s.station_name,\n s.station_name_k,\n s.station_name_r,\n s.station_name_rn,\n s.station_name_zh,\n s.station_name_ko,\n s.station_number1,\n s.station_number2,\n s.station_number3,\n s.station_number4,\n s.three_letter_code,\n s.line_cd,\n s.pref_cd,\n s.post,\n s.address,\n s.lon,\n s.lat,\n s.open_ymd,\n s.close_ymd,\n s.e_status,\n s.e_sort,\n l.company_cd,\n COALESCE(NULLIF(COALESCE(a.line_name, l.line_name), ''), NULL) AS line_name,\n COALESCE(NULLIF(COALESCE(a.line_name_k, l.line_name_k), ''), NULL) AS line_name_k,\n COALESCE(NULLIF(COALESCE(a.line_name_h, l.line_name_h), ''), NULL) AS line_name_h,\n COALESCE(NULLIF(COALESCE(a.line_name_r, l.line_name_r), ''), NULL) AS line_name_r,\n COALESCE(NULLIF(COALESCE(a.line_name_zh, l.line_name_zh), ''), NULL) AS line_name_zh,\n COALESCE(NULLIF(COALESCE(a.line_name_ko, l.line_name_ko), ''), NULL) AS line_name_ko,\n COALESCE(NULLIF(COALESCE(a.line_color_c, l.line_color_c), ''), NULL) AS line_color_c,\n l.line_type,\n l.line_symbol1,\n l.line_symbol2,\n l.line_symbol3,\n l.line_symbol4,\n l.line_symbol1_color,\n l.line_symbol2_color,\n l.line_symbol3_color,\n l.line_symbol4_color,\n l.line_symbol1_shape,\n l.line_symbol2_shape,\n l.line_symbol3_shape,\n l.line_symbol4_shape,\n COALESCE(l.average_distance, 0.0)::DOUBLE PRECISION AS average_distance,\n COALESCE(from_sst.line_group_cd, NULL)::int AS line_group_cd, -- has_train_types用\n NULL::int AS type_id,\n NULL::int AS sst_id,\n NULL::int AS type_cd,\n NULL::int AS pass,\n NULL::text AS type_name,\n NULL::text AS type_name_k,\n NULL::text AS type_name_r,\n NULL::text AS type_name_zh,\n NULL::text AS type_name_ko,\n NULL::text AS color,\n NULL::int AS direction,\n NULL::int AS kind,\n s.transport_type\n FROM stations AS s\n LEFT JOIN from_stations AS fs\n ON fs.station_cd IS NOT NULL\n LEFT JOIN station_station_types AS from_sst\n ON from_sst.station_cd = fs.station_cd\n LEFT JOIN station_station_types AS dst_sst\n ON dst_sst.station_cd = s.station_cd\n LEFT JOIN types AS t\n ON t.type_cd = dst_sst.type_cd\n LEFT JOIN line_aliases AS la\n ON la.station_cd = s.station_cd\n LEFT JOIN aliases AS a\n ON la.alias_cd = a.id\n JOIN lines AS l\n ON l.line_cd = s.line_cd\n AND l.e_status = 0\n WHERE\n (\n s.station_name ILIKE $2\n OR s.station_name_rn ILIKE $3\n OR s.station_name_k ILIKE $4\n OR s.station_name_zh ILIKE $5\n OR s.station_name_ko ILIKE $6\n )\n AND s.e_status = 0\n AND ($8::int IS NULL OR COALESCE(s.transport_type, 0) = $8)\n AND (\n (\n from_sst.id IS NOT NULL\n AND dst_sst.id IS NOT NULL\n AND from_sst.line_group_cd = dst_sst.line_group_cd\n AND dst_sst.pass <> 1\n )\n OR\n (\n (from_sst.id IS NULL OR dst_sst.id IS NULL)\n AND s.line_cd = COALESCE(fs.line_cd, s.line_cd)\n )\n )\n ORDER BY s.station_cd, s.station_g_cd, s.station_name\n )\n SELECT *\n FROM filtered\n ORDER BY station_g_cd, station_name\n LIMIT $7", + "query": "WITH from_stations AS (\n SELECT\n s.station_cd,\n s.line_cd\n FROM stations AS s\n WHERE s.station_g_cd = $1\n AND s.e_status = 0\n ),\n filtered AS (\n SELECT DISTINCT ON (s.station_cd)\n s.station_cd,\n s.station_g_cd,\n s.station_name,\n s.station_name_k,\n s.station_name_r,\n s.station_name_rn,\n s.station_name_zh,\n s.station_name_ko,\n s.station_number1,\n s.station_number2,\n s.station_number3,\n s.station_number4,\n s.three_letter_code,\n s.line_cd,\n s.pref_cd,\n s.post,\n s.address,\n s.lon,\n s.lat,\n s.open_ymd,\n s.close_ymd,\n s.e_status,\n s.e_sort,\n l.company_cd,\n COALESCE(NULLIF(COALESCE(a.line_name, l.line_name), ''), NULL) AS line_name,\n COALESCE(NULLIF(COALESCE(a.line_name_k, l.line_name_k), ''), NULL) AS line_name_k,\n COALESCE(NULLIF(COALESCE(a.line_name_h, l.line_name_h), ''), NULL) AS line_name_h,\n COALESCE(NULLIF(COALESCE(a.line_name_r, l.line_name_r), ''), NULL) AS line_name_r,\n COALESCE(NULLIF(COALESCE(a.line_name_zh, l.line_name_zh), ''), NULL) AS line_name_zh,\n COALESCE(NULLIF(COALESCE(a.line_name_ko, l.line_name_ko), ''), NULL) AS line_name_ko,\n COALESCE(NULLIF(COALESCE(a.line_color_c, l.line_color_c), ''), NULL) AS line_color_c,\n l.line_type,\n l.line_symbol1,\n l.line_symbol2,\n l.line_symbol3,\n l.line_symbol4,\n l.line_symbol1_color,\n l.line_symbol2_color,\n l.line_symbol3_color,\n l.line_symbol4_color,\n l.line_symbol1_shape,\n l.line_symbol2_shape,\n l.line_symbol3_shape,\n l.line_symbol4_shape,\n COALESCE(l.average_distance, 0.0)::DOUBLE PRECISION AS average_distance,\n COALESCE(from_sst.line_group_cd, NULL)::int AS line_group_cd, -- has_train_types用\n NULL::int AS type_id,\n NULL::int AS sst_id,\n NULL::int AS type_cd,\n NULL::int AS pass,\n NULL::text AS type_name,\n NULL::text AS type_name_k,\n NULL::text AS type_name_r,\n NULL::text AS type_name_zh,\n NULL::text AS type_name_ko,\n NULL::text AS color,\n NULL::int AS direction,\n NULL::int AS kind,\n s.transport_type\n FROM stations AS s\n LEFT JOIN from_stations AS fs\n ON fs.station_cd IS NOT NULL\n LEFT JOIN station_station_types AS from_sst\n ON from_sst.station_cd = fs.station_cd\n LEFT JOIN station_station_types AS dst_sst\n ON dst_sst.station_cd = s.station_cd\n LEFT JOIN types AS t\n ON t.type_cd = dst_sst.type_cd\n LEFT JOIN line_aliases AS la\n ON la.station_cd = s.station_cd\n LEFT JOIN aliases AS a\n ON la.alias_cd = a.id\n JOIN lines AS l\n ON l.line_cd = s.line_cd\n AND l.e_status = 0\n WHERE\n (\n s.station_name LIKE $2\n OR s.station_name_rn ILIKE $3\n OR s.station_name_k LIKE $4\n OR s.station_name_zh LIKE $5\n OR s.station_name_ko LIKE $6\n )\n AND s.e_status = 0\n AND ($8::int IS NULL OR COALESCE(s.transport_type, 0) = $8)\n AND (\n (\n from_sst.id IS NOT NULL\n AND dst_sst.id IS NOT NULL\n AND from_sst.line_group_cd = dst_sst.line_group_cd\n AND dst_sst.pass <> 1\n )\n OR\n (\n (from_sst.id IS NULL OR dst_sst.id IS NULL)\n AND s.line_cd = COALESCE(fs.line_cd, s.line_cd)\n )\n )\n ORDER BY s.station_cd, s.station_g_cd, s.station_name\n )\n SELECT *\n FROM filtered\n ORDER BY station_g_cd, station_name\n LIMIT $7", "describe": { "columns": [ { @@ -373,5 +373,5 @@ false ] }, - "hash": "b67aedd7a4dddd9b30b486e92bbc17f967b74f164dc09b701ffaafd5b3fbca2f" + "hash": "5f4de4e07d61f2163cda87863b73fef621d587a5056b9f8f4bf96fcd77ae1017" } diff --git a/stationapi/src/infrastructure/station_repository.rs b/stationapi/src/infrastructure/station_repository.rs index d29e7430..764e7922 100644 --- a/stationapi/src/infrastructure/station_repository.rs +++ b/stationapi/src/infrastructure/station_repository.rs @@ -1222,11 +1222,11 @@ impl InternalStationRepository { AND l.e_status = 0 WHERE ( - s.station_name ILIKE $2 + s.station_name LIKE $2 OR s.station_name_rn ILIKE $3 - OR s.station_name_k ILIKE $4 - OR s.station_name_zh ILIKE $5 - OR s.station_name_ko ILIKE $6 + OR s.station_name_k LIKE $4 + OR s.station_name_zh LIKE $5 + OR s.station_name_ko LIKE $6 ) AND s.e_status = 0 AND ($8::int IS NULL OR COALESCE(s.transport_type, 0) = $8)