Skip to content

Commit

Permalink
#121: created ColumnMetadata through builder
Browse files Browse the repository at this point in the history
  • Loading branch information
AnastasiiaSergienko committed Mar 28, 2019
1 parent a453c9c commit a86a3da
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 58 deletions.
2 changes: 1 addition & 1 deletion jdbc-adapter/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<junit.version>5.4.0</junit.version>
<junit.platform.version>1.3.2</junit.platform.version>
<maven.surefire.version>2.22.1</maven.surefire.version>
<vscommon.version>3.0.0</vscommon.version>
<vscommon.version>4.0.0</vscommon.version>
</properties>
<distributionManagement>
<repository>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
package com.exasol.adapter.dialects;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.*;

import com.exasol.adapter.jdbc.ColumnAdapterNotes;
import com.exasol.adapter.jdbc.ConnectionInformation;
import com.exasol.adapter.jdbc.JdbcAdapterProperties;
Expand All @@ -13,6 +8,11 @@
import com.exasol.adapter.sql.AggregateFunction;
import com.exasol.adapter.sql.ScalarFunction;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.*;

/**
* Abstract implementation of a dialect. We recommend that every dialect should
* extend this abstract class.
Expand Down Expand Up @@ -110,7 +110,8 @@ public ColumnMetadata mapColumn(final ResultSet columns) throws SQLException {
columnTypeName = "";
}
final String adapterNotes = ColumnAdapterNotes.serialize(new ColumnAdapterNotes(jdbcType, columnTypeName));
return new ColumnMetadata(colName, adapterNotes, colType, isNullable, isIdentity, defaultValue, comment);
return ColumnMetadata.builder().name(colName).adapterNotes(adapterNotes).type(colType).nullable(isNullable)
.identity(isIdentity).defaultValue(defaultValue).comment(comment).build();
}

private static DataType getExaTypeFromJdbcType(final JdbcTypeDescription jdbcTypeDescription) throws SQLException {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
package com.exasol.adapter.dialects;

import static org.junit.Assert.assertEquals;

import java.util.ArrayList;
import java.util.List;

import org.junit.Test;
import org.mockito.Mockito;

import com.exasol.adapter.AdapterException;
import com.exasol.adapter.dialects.impl.ExasolSqlDialect;
import com.exasol.adapter.jdbc.SchemaAdapterNotes;
import com.exasol.adapter.metadata.*;
import com.exasol.adapter.metadata.ColumnMetadata;
import com.exasol.adapter.metadata.DataType;
import com.exasol.adapter.metadata.TableMetadata;
import com.exasol.adapter.sql.*;
import com.google.common.collect.ImmutableList;

import org.junit.Test;
import org.mockito.Mockito;
import utils.SqlTestUtil;

import java.util.ArrayList;
import java.util.List;

import static org.junit.Assert.assertEquals;

public class CustomSqlGenerationVisitorTest {

/**
Expand All @@ -30,8 +30,8 @@ public void testSqlGenerator() throws AdapterException {
final String expectedSql = "SELECT NOT_CUSTOM (NOT_CUSTOM (\"C1\")) FROM \"" + schemaName + "\".\"TEST\"";
final SqlGenerationContext context = new SqlGenerationContext("", schemaName, false, false);
final SqlDialectContext dialectContext = new SqlDialectContext(Mockito.mock(SchemaAdapterNotes.class));
final SqlGenerationVisitor generator = new TestSqlGenerationVisitor(new ExasolSqlDialect(dialectContext),
context);
final SqlGenerationVisitor generator =
new TestSqlGenerationVisitor(new ExasolSqlDialect(dialectContext), context);
final String actualSql = node.accept(generator);
assertEquals(SqlTestUtil.normalizeSql(expectedSql), SqlTestUtil.normalizeSql(actualSql));
}
Expand All @@ -40,13 +40,14 @@ private SqlNode getTestSqlNode() {
final TableMetadata clicksMeta = getTestTableMetadata();
final SqlTable fromClause = new SqlTable("TEST", clicksMeta);
final SqlSelectList selectList = SqlSelectList.createRegularSelectList(ImmutableList.<SqlNode>of(
new SqlPredicateNot(new SqlPredicateNot(new SqlColumn(1, clicksMeta.getColumns().get(0))))));
new SqlPredicateNot(new SqlPredicateNot(new SqlColumn(1, clicksMeta.getColumns().get(0))))));
return new SqlStatementSelect(fromClause, selectList, null, null, null, null, null);
}

private TableMetadata getTestTableMetadata() {
final List<ColumnMetadata> columns = new ArrayList<>();
columns.add(new ColumnMetadata("C1", "", DataType.createBool(), true, false, "", ""));
columns.add(ColumnMetadata.builder().name("C1").adapterNotes("").type(DataType.createBool()).nullable(true)
.identity(false).defaultValue("").comment("").build());
return new TableMetadata("TEST", "", columns, "");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,8 @@ public void testInvalidAliases() throws Exception {

private TableMetadata getTestTableMetadata() {
final List<ColumnMetadata> columns = new ArrayList<>();
columns.add(new ColumnMetadata("C1", "", DataType.createBool(), true, false, "", ""));
columns.add(ColumnMetadata.builder().name("C1").adapterNotes("").type(DataType.createBool()).nullable(true)
.identity(false).defaultValue("").comment("").build());
return new TableMetadata("TEST", "", columns, "");
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,26 +1,34 @@
package com.exasol.adapter.dialects;

import static com.exasol.adapter.dialects.SqlGenerationHelper.getMetadataFrom;
import static org.junit.Assert.assertEquals;

import java.util.*;

import org.junit.Test;
import org.mockito.Mockito;

import com.exasol.adapter.metadata.ColumnMetadata;
import com.exasol.adapter.metadata.DataType;
import com.exasol.adapter.metadata.TableMetadata;
import com.exasol.adapter.sql.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;

public class SqlGenerationHelperTest {
import java.util.ArrayList;
import java.util.List;

import static com.exasol.adapter.dialects.SqlGenerationHelper.getMetadataFrom;
import static org.junit.Assert.assertEquals;

class SqlGenerationHelperTest {
private static final String TABLE_NAME_1 = "TABLE_NAME_1";
private static final String TABLE_NAME_2 = "TABLE_NAME_2";
private static final String TABLE_NAME_3 = "TABLE_NAME_3";
private static final String TABLE_NAME_4 = "TABLE_NAME_4";
private final List<ColumnMetadata> columns = Collections.singletonList(Mockito.mock(ColumnMetadata.class));
private List<ColumnMetadata> columns;

@BeforeEach
void setUp() {
this.columns = new ArrayList<>();
this.columns.add(ColumnMetadata.builder().name("column1").type(DataType.createBool()).build());
}

@Test
public void testGetMetadataFromTable() {
void testGetMetadataFromTable() {
final TableMetadata metadataT1 = new TableMetadata(TABLE_NAME_1, "", this.columns, "");
final SqlNode t1 = new SqlTable(TABLE_NAME_1, metadataT1);
final List<TableMetadata> allMetadata = new ArrayList<>();
Expand All @@ -30,7 +38,7 @@ public void testGetMetadataFromTable() {
}

@Test
public void testGetMetadataFromSimpleJoin() {
void testGetMetadataFromSimpleJoin() {
final TableMetadata metadataT1 = new TableMetadata(TABLE_NAME_1, "", this.columns, "");
final TableMetadata metadataT2 = new TableMetadata(TABLE_NAME_2, "", this.columns, "");

Expand All @@ -46,7 +54,7 @@ public void testGetMetadataFromSimpleJoin() {
}

@Test
public void testGetMetadataFromNestedJoin() {
void testGetMetadataFromNestedJoin() {
final TableMetadata metadataT1 = new TableMetadata(TABLE_NAME_1, "", this.columns, "");
final TableMetadata metadataT2 = new TableMetadata(TABLE_NAME_2, "", this.columns, "");
final TableMetadata metadataT3 = new TableMetadata(TABLE_NAME_3, "", this.columns, "");
Expand All @@ -66,7 +74,7 @@ public void testGetMetadataFromNestedJoin() {
}

@Test
public void testGetMetadataFromTwoNestedJoins() {
void testGetMetadataFromTwoNestedJoins() {
final TableMetadata metadataT1 = new TableMetadata(TABLE_NAME_1, "", this.columns, "");
final TableMetadata metadataT2 = new TableMetadata(TABLE_NAME_2, "", this.columns, "");
final TableMetadata metadataT3 = new TableMetadata(TABLE_NAME_3, "", this.columns, "");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
package com.exasol.adapter.dialects.impl;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import com.exasol.adapter.dialects.SqlDialectContext;
import com.exasol.adapter.jdbc.ColumnAdapterNotes;
import com.exasol.adapter.jdbc.SchemaAdapterNotes;
import com.exasol.adapter.metadata.*;
import com.exasol.adapter.metadata.ColumnMetadata;
import com.exasol.adapter.metadata.DataType;
import com.exasol.adapter.metadata.TableMetadata;
import com.exasol.adapter.sql.*;
import com.google.common.collect.ImmutableList;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

public class DialectTestData {

public static SqlNode getTestSqlNode() {
Expand All @@ -23,38 +25,43 @@ public static SqlNode getTestSqlNode() {
final TableMetadata clicksMeta = getClicksTableMetadata();
final SqlTable fromClause = new SqlTable("CLICKS", clicksMeta);
final SqlSelectList selectList = SqlSelectList.createRegularSelectList(ImmutableList
.of(new SqlColumn(0, clicksMeta.getColumns().get(0)), new SqlFunctionAggregate(AggregateFunction.COUNT,
ImmutableList.<SqlNode>of(new SqlColumn(1, clicksMeta.getColumns().get(1))), false)));
.of(new SqlColumn(0, clicksMeta.getColumns().get(0)), new SqlFunctionAggregate(AggregateFunction.COUNT,
ImmutableList.<SqlNode>of(new SqlColumn(1, clicksMeta.getColumns().get(1))), false)));
final SqlNode whereClause = new SqlPredicateLess(new SqlLiteralExactnumeric(BigDecimal.ONE),
new SqlColumn(0, clicksMeta.getColumns().get(0)));
final SqlExpressionList groupBy = new SqlGroupBy(
ImmutableList.<SqlNode>of(new SqlColumn(0, clicksMeta.getColumns().get(0))));
new SqlColumn(0, clicksMeta.getColumns().get(0)));
final SqlExpressionList groupBy =
new SqlGroupBy(ImmutableList.<SqlNode>of(new SqlColumn(0, clicksMeta.getColumns().get(0))));
final SqlNode countUrl = new SqlFunctionAggregate(AggregateFunction.COUNT,
ImmutableList.<SqlNode>of(new SqlColumn(1, clicksMeta.getColumns().get(1))), false);
ImmutableList.<SqlNode>of(new SqlColumn(1, clicksMeta.getColumns().get(1))), false);
final SqlNode having = new SqlPredicateLess(new SqlLiteralExactnumeric(BigDecimal.ONE), countUrl);
final SqlOrderBy orderBy = new SqlOrderBy(
ImmutableList.<SqlNode>of(new SqlColumn(0, clicksMeta.getColumns().get(0))), ImmutableList.of(true),
ImmutableList.of(true));
final SqlOrderBy orderBy =
new SqlOrderBy(ImmutableList.<SqlNode>of(new SqlColumn(0, clicksMeta.getColumns().get(0))),
ImmutableList.of(true), ImmutableList.of(true));
final SqlLimit limit = new SqlLimit(10);
return new SqlStatementSelect(fromClause, selectList, whereClause, groupBy, having, orderBy, limit);
}

public static TableMetadata getClicksTableMetadata() {
final List<ColumnMetadata> columns = new ArrayList<>();
columns.add(new ColumnMetadata("USER_ID", ColumnAdapterNotes.serialize(new ColumnAdapterNotes(3, "DECIMAL")),
DataType.createDecimal(18, 0), true, false, "", ""));
columns.add(new ColumnMetadata("URL", ColumnAdapterNotes.serialize(new ColumnAdapterNotes(12, "VARCHAR")),
DataType.createVarChar(10000, DataType.ExaCharset.UTF8), true, false, "", ""));
columns.add(ColumnMetadata.builder().name("USER_ID")
.adapterNotes(ColumnAdapterNotes.serialize(new ColumnAdapterNotes(3, "DECIMAL")))
.type(DataType.createDecimal(18, 0)).nullable(true).identity(false).defaultValue("").comment("").build());
columns.add(ColumnMetadata.builder().name("URL")
.adapterNotes(ColumnAdapterNotes.serialize(new ColumnAdapterNotes(12, "VARCHAR")))
.type(DataType.createVarChar(10000, DataType.ExaCharset.UTF8)).nullable(true).identity(false)
.defaultValue("").comment("").build());
return new TableMetadata("CLICKS", "", columns, "");
}

public static SqlDialectContext getExasolDialectContext() {
return new SqlDialectContext(new SchemaAdapterNotes(".", "\"", false, true, false, true, false, false, false,
true, false, false, true, false));
return new SqlDialectContext(
new SchemaAdapterNotes(".", "\"", false, true, false, true, false, false, false, true, false, false, true,
false));
}

public static SqlDialectContext getOracleDialectContext() {
return new SqlDialectContext(new SchemaAdapterNotes(".", "\"", false, false, false, false, false, false, false,
false, false, false, true, false));
return new SqlDialectContext(
new SchemaAdapterNotes(".", "\"", false, false, false, false, false, false, false, false, false, false,
true, false));
}
}

0 comments on commit a86a3da

Please sign in to comment.