@@ -29,7 +29,12 @@ class SqlTableReferenceTest {
2929 new SqlTableReference .TableDefinition ("CREATE TABLE c (z TEXT)" , List .of ("z" )),
3030 "g" ,
3131 new SqlTableReference .TableDefinition (
32- "CREATE TABLE g (p INTEGER, q AS (p+1), r TEXT NOT NULL)" , List .of ("p" , "q" , "r" )));
32+ "CREATE TABLE g (p INTEGER, q AS (p+1), r TEXT NOT NULL)" , List .of ("p" , "q" , "r" )),
33+ "anv" ,
34+ new SqlTableReference .TableDefinition ("CREATE TABLE anv (id INTEGER)" , List .of ("id" )),
35+ "användare" ,
36+ new SqlTableReference .TableDefinition (
37+ "CREATE TABLE användare (id INTEGER, namn_ö TEXT)" , List .of ("id" , "namn_ö" )));
3338
3439 private static final SqlTableReference .Schema SCHEMA = reference -> {
3540 if (reference .table () == null ) {
@@ -58,6 +63,57 @@ void resolvesQuotedAndBracketedNames() throws SQLException {
5863 .containsExactly (new SqlTableReference .TableRef (null , "my table" ));
5964 }
6065
66+ @ Test
67+ void resolvesNonAsciiTableAndColumn () throws SQLException {
68+ SqlTableReference .Resolution resolution = resolve ("SELECT namn_ö FROM användare" );
69+
70+ assertThat (resolution .labels ()).containsExactly ("namn_ö" );
71+ assertThat (resolution .tables ())
72+ .containsExactly (new SqlTableReference .TableRef (null , "användare" ));
73+ }
74+
75+ @ Test
76+ void resolvesNonAsciiColumnThroughTableAlias () throws SQLException {
77+ assertThat (resolve ("SELECT a.namn_ö FROM användare a" ).tables ())
78+ .containsExactly (new SqlTableReference .TableRef (null , "användare" ));
79+ assertThat (resolve ("SELECT * FROM användare a" ).tables ())
80+ .containsExactly (
81+ new SqlTableReference .TableRef (null , "användare" ),
82+ new SqlTableReference .TableRef (null , "användare" ));
83+ }
84+
85+ @ Test
86+ void resolvesNonAsciiAliases () throws SQLException {
87+ assertThat (resolve ("SELECT namn_ö AS namn FROM användare" ).labels ()).containsExactly ("namn" );
88+ assertThat (resolve ("SELECT namn_ö namn FROM användare" ).labels ()).containsExactly ("namn" );
89+ assertThat (resolve ("SELECT namn_ö AS namn FROM användare" ).tables ())
90+ .containsExactly (new SqlTableReference .TableRef (null , "användare" ));
91+ assertThat (resolve ("SELECT å.namn_ö FROM användare AS å" ).tables ())
92+ .containsExactly (new SqlTableReference .TableRef (null , "användare" ));
93+ }
94+
95+ @ Test
96+ void resolvesQuotedNonAsciiNames () throws SQLException {
97+ assertThat (resolve ("SELECT namn_ö FROM \" användare\" " ).tables ())
98+ .containsExactly (new SqlTableReference .TableRef (null , "användare" ));
99+ assertThat (resolve ("SELECT namn_ö FROM [användare]" ).tables ())
100+ .containsExactly (new SqlTableReference .TableRef (null , "användare" ));
101+ assertThat (resolve ("SELECT \" namn_ö\" FROM \" användare\" " ).labels ()).containsExactly ("namn_ö" );
102+ }
103+
104+ @ Test
105+ void keepsNonAsciiTableWholeWhenAnAsciiPrefixTableExists () throws SQLException {
106+ SqlTableReference .Resolution resolution = resolve ("SELECT * FROM användare" );
107+
108+ assertThat (resolution .labels ()).containsExactly ("id" , "namn_ö" );
109+ assertThat (resolution .tables ())
110+ .containsExactly (
111+ new SqlTableReference .TableRef (null , "användare" ),
112+ new SqlTableReference .TableRef (null , "användare" ));
113+ assertThat (resolve ("SELECT id FROM anv" ).tables ())
114+ .containsExactly (new SqlTableReference .TableRef (null , "anv" ));
115+ }
116+
61117 @ Test
62118 void resolvesAliasesWithAndWithoutAs () throws SQLException {
63119 assertThat (resolve ("SELECT a AS z FROM w" ).labels ()).containsExactly ("z" );
0 commit comments