@@ -170,28 +170,76 @@ public void typesMatch_checksMapSchema() {
170170
171171 @ Test
172172 public void typesMatch_checksProto () {
173- SqlType .Proto <Singer > proto = SqlType .protoOf (Singer .getDefaultInstance ());
174- SqlType .Proto <Album > anotherProto = SqlType .protoOf (Album .getDefaultInstance ());
175- SqlType .Proto schemalessProto = SchemalessProto .create ("MyMessage" );
176- SqlType .Proto anotherSchemalessProto = SchemalessProto .create ("MyAnotherMessage" );
177-
178- assertThat (SqlType .typesMatch (schemalessProto , proto )).isTrue ();
179- assertThat (SqlType .typesMatch (proto , schemalessProto )).isTrue ();
180- assertThat (SqlType .typesMatch (schemalessProto , anotherSchemalessProto )).isFalse ();
181- assertThat (SqlType .typesMatch (proto , anotherProto )).isFalse ();
173+ SqlType .Proto <Singer > singerProto = SqlType .protoOf (Singer .getDefaultInstance ());
174+ SqlType .Proto <Album > albumProto = SqlType .protoOf (Album .getDefaultInstance ());
175+ SqlType .Proto schemalessSinger =
176+ SchemalessProto .create ("com.google.cloud.bigtable.data.v2.test.Singer" );
177+ SqlType .Proto schemalessAlbum =
178+ SchemalessProto .create ("com.google.cloud.bigtable.data.v2.test.Album" );
179+
180+ // Both Schemaless types
181+ assertThat (SqlType .typesMatch (schemalessSinger , schemalessAlbum )).isFalse ();
182+ assertThat (
183+ SqlType .typesMatch (
184+ schemalessSinger ,
185+ SchemalessProto .create ("com.google.cloud.bigtable.data.v2.test.Singer" )))
186+ .isTrue ();
187+
188+ // Both concrete types
189+ assertThat (SqlType .typesMatch (singerProto , albumProto )).isFalse ();
190+ assertThat (SqlType .typesMatch (singerProto , SqlType .protoOf (Singer .getDefaultInstance ())))
191+ .isTrue ();
192+
193+ // Schemaless versus concrete types (unqualified proto message names must match)
194+ assertThat (SqlType .typesMatch (schemalessSinger , singerProto )).isTrue ();
195+ assertThat (SqlType .typesMatch (singerProto , schemalessSinger )).isTrue ();
196+ assertThat (SqlType .typesMatch (singerProto , SchemalessProto .create ("Singer" ))).isTrue ();
197+ assertThat (SqlType .typesMatch (singerProto , SchemalessProto .create ("foo.bar.Singer" ))).isTrue ();
198+ assertThat (SqlType .typesMatch (schemalessSinger , albumProto )).isFalse ();
199+ assertThat (SqlType .typesMatch (albumProto , schemalessSinger )).isFalse ();
200+ assertThat (SqlType .typesMatch (singerProto , SchemalessProto .create ("Album" ))).isFalse ();
201+ assertThat (
202+ SqlType .typesMatch (
203+ singerProto ,
204+ SchemalessProto .create ("com.google.cloud.bigtable.data.v2.test.Album" )))
205+ .isFalse ();
206+ assertThat (SqlType .typesMatch (singerProto , SchemalessProto .create ("" ))).isFalse ();
182207 }
183208
184209 @ Test
185210 public void typesMatch_checksEnum () {
186- SqlType .Enum <Genre > myEnum = SqlType .enumOf (Genre ::forNumber );
187- SqlType .Enum <Format > anotherEnum = SqlType .enumOf (Format ::forNumber );
188- SqlType .Enum schemalessEnum = SchemalessEnum .create ("MyEnum" );
189- SqlType .Enum anotherSchemalessEnum = SchemalessEnum .create ("MyAnotherEnum" );
190-
191- assertThat (SqlType .typesMatch (schemalessEnum , myEnum )).isTrue ();
192- assertThat (SqlType .typesMatch (myEnum , schemalessEnum )).isTrue ();
193- assertThat (SqlType .typesMatch (schemalessEnum , anotherSchemalessEnum )).isFalse ();
194- assertThat (SqlType .typesMatch (myEnum , anotherEnum )).isFalse ();
211+ SqlType .Enum <Genre > genreEnum = SqlType .enumOf (Genre ::forNumber );
212+ SqlType .Enum <Format > formatEnum = SqlType .enumOf (Format ::forNumber );
213+ SqlType .Enum schemalessGenre =
214+ SchemalessEnum .create ("com.google.cloud.bigtable.data.v2.test.Genre" );
215+ SqlType .Enum schemalessFormat =
216+ SchemalessEnum .create ("com.google.cloud.bigtable.data.v2.test.Format" );
217+
218+ // Both Schemaless types
219+ assertThat (SqlType .typesMatch (schemalessGenre , schemalessFormat )).isFalse ();
220+ assertThat (
221+ SqlType .typesMatch (
222+ schemalessGenre ,
223+ SchemalessEnum .create ("com.google.cloud.bigtable.data.v2.test.Genre" )))
224+ .isTrue ();
225+
226+ // Both concrete types
227+ assertThat (SqlType .typesMatch (genreEnum , formatEnum )).isFalse ();
228+ assertThat (SqlType .typesMatch (genreEnum , SqlType .enumOf (Genre ::forNumber ))).isTrue ();
229+
230+ // Schemaless versus concrete types (unqualified enum message names must match)
231+ assertThat (SqlType .typesMatch (schemalessGenre , genreEnum )).isTrue ();
232+ assertThat (SqlType .typesMatch (genreEnum , schemalessGenre )).isTrue ();
233+ assertThat (SqlType .typesMatch (genreEnum , SchemalessEnum .create ("Genre" ))).isTrue ();
234+ assertThat (SqlType .typesMatch (genreEnum , SchemalessEnum .create ("foo.bar.Genre" ))).isTrue ();
235+ assertThat (SqlType .typesMatch (schemalessGenre , formatEnum )).isFalse ();
236+ assertThat (SqlType .typesMatch (formatEnum , schemalessGenre )).isFalse ();
237+ assertThat (SqlType .typesMatch (genreEnum , SchemalessEnum .create ("Format" ))).isFalse ();
238+ assertThat (
239+ SqlType .typesMatch (
240+ genreEnum , SchemalessProto .create ("com.google.cloud.bigtable.data.v2.test.Format" )))
241+ .isFalse ();
242+ assertThat (SqlType .typesMatch (genreEnum , SchemalessEnum .create ("" ))).isFalse ();
195243 }
196244
197245 @ Test
0 commit comments