### Question:
TableUtil { public static String buildCanonicalTableName(GenDialect dialect, String catalogName, String schemaName, String tableName) { if (dialect == null) { throw new NullPointerException("dialect"); } if (tableName == null) { throw new NullPointerException("tableName"); } StringBuilder buf = new StringBuilder(); if (catalogName != null) { buf.append(dialect.unquote(catalogName.toLowerCase())); buf.append("."); if (schemaName != null) { buf.append(dialect.unquote(schemaName.toLowerCase())); } buf.append("."); } else if (schemaName != null) { buf.append(dialect.unquote(schemaName.toLowerCase())); buf.append("."); } buf.append(dialect.unquote(tableName.toLowerCase())); return buf.toString(); } protected  TableUtil(); static TableSet getTableSet(GenDialect dialect, DataSource dataSource); static String buildCanonicalTableName(GenDialect dialect,
            String catalogName, String schemaName, String tableName); static String buildFullTableName(String catalogName,
            String schemaName, String tableName); static String[] splitCanonicalTableName(String canonicalTableName);  }### Answer:
@Test public void testBuildCanonicalTableName() throws Exception { GenDialect dialect = new StandardGenDialect(); assertEquals("aaa.bbb.ccc", TableUtil.buildCanonicalTableName(dialect, "AAA", "BBB", "CCC")); assertEquals("bbb.ccc", TableUtil.buildCanonicalTableName(dialect, null, "BBB", "CCC")); assertEquals("aaa..ccc", TableUtil.buildCanonicalTableName(dialect, "AAA", null, "CCC")); assertEquals("ccc", TableUtil.buildCanonicalTableName(dialect, null, null, "CCC")); assertEquals("aaa.bbb.ccc", TableUtil.buildCanonicalTableName(dialect, "\"AAA\"", "\"BBB\"", "\"CCC\"")); }