Skip to content

Commit 89b77ee

Browse files
authored
Group together the attributes related to SQL scripts subdirectories (GoogleCloudPlatform#483)
- create QueryGroup as a value-based class - move stats-source, tenant-setup and required-ness properties to the new class
1 parent 720447c commit 89b77ee

7 files changed

Lines changed: 109 additions & 71 deletions

File tree

dumper/app/src/main/java/com/google/edwmigration/dumper/application/dumper/connector/oracle/OracleStatsQuery.java

Lines changed: 18 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@
1616
*/
1717
package com.google.edwmigration.dumper.application.dumper.connector.oracle;
1818

19-
import static com.google.edwmigration.dumper.application.dumper.connector.oracle.OracleStatsQuery.TenantSetup.MULTI_TENANT;
20-
import static com.google.edwmigration.dumper.application.dumper.connector.oracle.StatsTaskListGenerator.StatsSource.AWR;
21-
import static com.google.edwmigration.dumper.application.dumper.connector.oracle.StatsTaskListGenerator.StatsSource.NATIVE;
22-
import static com.google.edwmigration.dumper.application.dumper.connector.oracle.StatsTaskListGenerator.StatsSource.STATSPACK;
19+
import static com.google.edwmigration.dumper.application.dumper.connector.oracle.QueryGroup.StatsSource.AWR;
20+
import static com.google.edwmigration.dumper.application.dumper.connector.oracle.QueryGroup.StatsSource.NATIVE;
21+
import static com.google.edwmigration.dumper.application.dumper.connector.oracle.QueryGroup.StatsSource.STATSPACK;
22+
import static com.google.edwmigration.dumper.application.dumper.connector.oracle.QueryGroup.TenantSetup.MULTI_TENANT;
2323
import static java.nio.charset.StandardCharsets.UTF_8;
2424

2525
import com.google.auto.value.AutoValue;
2626
import com.google.common.io.Resources;
27-
import com.google.edwmigration.dumper.application.dumper.connector.oracle.StatsTaskListGenerator.StatsSource;
27+
import com.google.edwmigration.dumper.application.dumper.connector.oracle.QueryGroup.TenantSetup;
2828
import java.io.IOException;
2929
import java.net.URL;
3030
import java.time.Duration;
@@ -35,65 +35,45 @@
3535
@ParametersAreNonnullByDefault
3636
public abstract class OracleStatsQuery {
3737

38-
abstract boolean isRequired();
39-
4038
@Nonnull
4139
abstract Duration queriedDuration();
4240

4341
@Nonnull
44-
abstract String name();
45-
46-
@Nonnull
47-
abstract String queryText();
42+
abstract QueryGroup queryGroup();
4843

4944
@Nonnull
50-
abstract StatsSource statsSource();
45+
abstract String name();
5146

5247
@Nonnull
53-
abstract TenantSetup tenantSetup();
48+
abstract String queryText();
5449

5550
@Nonnull
5651
static OracleStatsQuery createAwr(String name, Duration queriedDuration) {
57-
return create(false, queriedDuration, name, AWR, MULTI_TENANT);
52+
QueryGroup queryGroup = QueryGroup.create(false, AWR, MULTI_TENANT);
53+
return create(name, queryGroup, queriedDuration);
5854
}
5955

6056
@Nonnull
6157
static OracleStatsQuery createNative(
6258
String name, boolean isRequired, Duration queriedDuration, TenantSetup tenantSetup) {
63-
return create(isRequired, queriedDuration, name, NATIVE, tenantSetup);
59+
QueryGroup queryGroup = QueryGroup.create(isRequired, NATIVE, tenantSetup);
60+
return create(name, queryGroup, queriedDuration);
6461
}
6562

6663
@Nonnull
6764
static OracleStatsQuery createStatspack(String name, Duration queriedDuration) {
68-
return create(false, queriedDuration, name, STATSPACK, MULTI_TENANT);
69-
}
70-
71-
enum TenantSetup {
72-
MULTI_TENANT("cdb"),
73-
SINGLE_TENANT("dba");
74-
75-
private final String code;
76-
77-
TenantSetup(String code) {
78-
this.code = code;
79-
}
65+
QueryGroup queryGroup = QueryGroup.create(false, STATSPACK, MULTI_TENANT);
66+
return create(name, queryGroup, queriedDuration);
8067
}
8168

82-
private static OracleStatsQuery create(
83-
boolean isRequired,
84-
Duration queriedDuration,
85-
String name,
86-
StatsSource statsSource,
87-
TenantSetup tenantSetup) {
88-
String source = statsSource.value;
89-
String path = String.format("oracle-stats/%s/%s/%s.sql", tenantSetup.code, source, name);
90-
return new AutoValue_OracleStatsQuery(
91-
isRequired, queriedDuration, name, loadFile(path), statsSource, tenantSetup);
69+
static OracleStatsQuery create(String name, QueryGroup queryGroup, Duration queriedDuration) {
70+
String path = String.format("oracle-stats/%s/%s.sql", queryGroup.path(), name);
71+
return new AutoValue_OracleStatsQuery(queriedDuration, queryGroup, name, loadFile(path));
9272
}
9373

9474
@Nonnull
9575
String description() {
96-
return String.format("Query{name=%s, statsSource=%s}", name(), statsSource());
76+
return String.format("Query{name=%s, statsSource=%s}", name(), queryGroup().statsSource());
9777
}
9878

9979
private static String loadFile(String path) {
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/*
2+
* Copyright 2022-2024 Google LLC
3+
* Copyright 2013-2021 CompilerWorks
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
package com.google.edwmigration.dumper.application.dumper.connector.oracle;
18+
19+
import com.google.auto.value.AutoValue;
20+
import javax.annotation.Nonnull;
21+
import javax.annotation.ParametersAreNonnullByDefault;
22+
23+
@AutoValue
24+
@ParametersAreNonnullByDefault
25+
abstract class QueryGroup {
26+
27+
abstract boolean required();
28+
29+
@Nonnull
30+
abstract StatsSource statsSource();
31+
32+
@Nonnull
33+
abstract TenantSetup tenantSetup();
34+
35+
@Nonnull
36+
static QueryGroup create(boolean required, StatsSource statsSource, TenantSetup tenantSetup) {
37+
return new AutoValue_QueryGroup(required, statsSource, tenantSetup);
38+
}
39+
40+
@Nonnull
41+
String path() {
42+
return tenantSetup().code + "/" + statsSource().value;
43+
}
44+
45+
/** The source of performance statistics. */
46+
enum StatsSource {
47+
AWR("awr"),
48+
NATIVE("native"),
49+
STATSPACK("statspack");
50+
51+
final String value;
52+
53+
StatsSource(String value) {
54+
this.value = value;
55+
}
56+
}
57+
58+
enum TenantSetup {
59+
MULTI_TENANT("cdb"),
60+
SINGLE_TENANT("dba");
61+
62+
final String code;
63+
64+
TenantSetup(String code) {
65+
this.code = code;
66+
}
67+
}
68+
}

dumper/app/src/main/java/com/google/edwmigration/dumper/application/dumper/connector/oracle/StatsJdbcTask.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
*/
1717
package com.google.edwmigration.dumper.application.dumper.connector.oracle;
1818

19-
import static com.google.edwmigration.dumper.application.dumper.connector.oracle.StatsTaskListGenerator.StatsSource.NATIVE;
19+
import static com.google.edwmigration.dumper.application.dumper.connector.oracle.QueryGroup.StatsSource.NATIVE;
2020

2121
import com.google.common.io.ByteSink;
2222
import com.google.edwmigration.dumper.application.dumper.handle.JdbcHandle;
@@ -83,7 +83,7 @@ public Summary doInConnection(
8383
throws SQLException {
8484
ResultSetExtractor<Summary> extractor = newCsvResultSetExtractor(sink);
8585
Summary result;
86-
if (query.statsSource() == NATIVE) {
86+
if (query.queryGroup().statsSource() == NATIVE) {
8787
result = doSelect(connection, extractor, query.queryText());
8888
} else {
8989
long days = query.queriedDuration().toDays();
@@ -99,7 +99,7 @@ public Summary doInConnection(
9999
@Nonnull
100100
@Override
101101
public TaskCategory getCategory() {
102-
if (query.isRequired()) {
102+
if (query.queryGroup().required()) {
103103
return TaskCategory.REQUIRED;
104104
} else {
105105
return TaskCategory.OPTIONAL;

dumper/app/src/main/java/com/google/edwmigration/dumper/application/dumper/connector/oracle/StatsTaskListGenerator.java

Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@
1616
*/
1717
package com.google.edwmigration.dumper.application.dumper.connector.oracle;
1818

19-
import static com.google.edwmigration.dumper.application.dumper.connector.oracle.OracleStatsQuery.TenantSetup.MULTI_TENANT;
20-
import static com.google.edwmigration.dumper.application.dumper.connector.oracle.OracleStatsQuery.TenantSetup.SINGLE_TENANT;
19+
import static com.google.edwmigration.dumper.application.dumper.connector.oracle.QueryGroup.StatsSource.AWR;
20+
import static com.google.edwmigration.dumper.application.dumper.connector.oracle.QueryGroup.StatsSource.NATIVE;
21+
import static com.google.edwmigration.dumper.application.dumper.connector.oracle.QueryGroup.StatsSource.STATSPACK;
22+
import static com.google.edwmigration.dumper.application.dumper.connector.oracle.QueryGroup.TenantSetup.MULTI_TENANT;
23+
import static com.google.edwmigration.dumper.application.dumper.connector.oracle.QueryGroup.TenantSetup.SINGLE_TENANT;
2124

2225
import com.google.common.collect.ImmutableList;
2326
import com.google.edwmigration.dumper.application.dumper.ConnectorArguments;
@@ -72,23 +75,23 @@ ImmutableList<Task<?>> createTasks(ConnectorArguments arguments, Duration querie
7275
builder.add(new DumpMetadataTask(arguments, scope.formatName()));
7376
builder.add(new FormatTask(scope.formatName()));
7477
for (String name : awrNames()) {
75-
OracleStatsQuery item = OracleStatsQuery.createAwr(name, queriedDuration);
78+
QueryGroup awr = QueryGroup.create(/* required= */ false, AWR, MULTI_TENANT);
79+
OracleStatsQuery item = OracleStatsQuery.create(name, awr, queriedDuration);
7680
builder.add(StatsJdbcTask.fromQuery(item));
7781
}
7882
for (String name : nativeNames(/* required= */ true)) {
79-
OracleStatsQuery item =
80-
OracleStatsQuery.createNative(
81-
name, /* isRequired= */ true, queriedDuration, MULTI_TENANT);
83+
QueryGroup requiredGroup = QueryGroup.create(/* required= */ true, NATIVE, MULTI_TENANT);
84+
OracleStatsQuery item = OracleStatsQuery.create(name, requiredGroup, queriedDuration);
8285
builder.add(StatsJdbcTask.fromQuery(item));
8386
}
8487
for (String name : nativeNames(/* required= */ false)) {
85-
OracleStatsQuery item =
86-
OracleStatsQuery.createNative(
87-
name, /* isRequired= */ false, queriedDuration, MULTI_TENANT);
88+
QueryGroup optionalGroupCdb = QueryGroup.create(/* required= */ false, NATIVE, MULTI_TENANT);
89+
OracleStatsQuery item = OracleStatsQuery.create(name, optionalGroupCdb, queriedDuration);
8890
builder.add(StatsJdbcTask.fromQuery(item));
8991
}
9092
for (String name : statspackNames()) {
91-
OracleStatsQuery query = OracleStatsQuery.createStatspack(name, queriedDuration);
93+
QueryGroup statspack = QueryGroup.create(/* required= */ false, STATSPACK, MULTI_TENANT);
94+
OracleStatsQuery query = OracleStatsQuery.create(name, statspack, queriedDuration);
9295
builder.add(StatsJdbcTask.fromQuery(query));
9396
}
9497
for (String name : NATIVE_NAMES_OPTIONAL) {
@@ -102,28 +105,15 @@ ImmutableList<Task<?>> createTasks(ConnectorArguments arguments, Duration querie
102105

103106
List<Task<?>> createTaskWithAlternative(
104107
String name, boolean isRequired, Duration queriedDuration) {
105-
OracleStatsQuery primary =
106-
OracleStatsQuery.createNative(name, /* isRequired= */ false, queriedDuration, MULTI_TENANT);
108+
QueryGroup primaryGroup = QueryGroup.create(/* required= */ false, NATIVE, MULTI_TENANT);
109+
OracleStatsQuery primary = OracleStatsQuery.create(name, primaryGroup, queriedDuration);
107110
StatsJdbcTask primaryTask = StatsJdbcTask.fromQuery(primary);
108-
OracleStatsQuery alternative =
109-
OracleStatsQuery.createNative(name, isRequired, queriedDuration, SINGLE_TENANT);
111+
QueryGroup alternativeGroup = QueryGroup.create(isRequired, NATIVE, SINGLE_TENANT);
112+
OracleStatsQuery alternative = OracleStatsQuery.create(name, alternativeGroup, queriedDuration);
110113
StatsJdbcTask alternativeTask = StatsJdbcTask.fromQuery(alternative).onlyIfFailed(primaryTask);
111114
return ImmutableList.of(primaryTask, alternativeTask);
112115
}
113116

114-
/** The source of performance statistics. */
115-
enum StatsSource {
116-
AWR("awr"),
117-
NATIVE("native"),
118-
STATSPACK("statspack");
119-
120-
final String value;
121-
122-
StatsSource(String value) {
123-
this.value = value;
124-
}
125-
}
126-
127117
ImmutableList<String> awrNames() {
128118
return AWR_NAMES;
129119
}

dumper/app/src/test/java/com/google/edwmigration/dumper/application/dumper/connector/oracle/OracleStatsQueryTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
*/
1717
package com.google.edwmigration.dumper.application.dumper.connector.oracle;
1818

19-
import static com.google.edwmigration.dumper.application.dumper.connector.oracle.OracleStatsQuery.TenantSetup.MULTI_TENANT;
19+
import static com.google.edwmigration.dumper.application.dumper.connector.oracle.QueryGroup.TenantSetup.MULTI_TENANT;
2020
import static java.time.Duration.ofDays;
2121
import static org.junit.Assert.assertEquals;
2222

dumper/app/src/test/java/com/google/edwmigration/dumper/application/dumper/connector/oracle/StatsJdbcTaskTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
*/
1717
package com.google.edwmigration.dumper.application.dumper.connector.oracle;
1818

19-
import static com.google.edwmigration.dumper.application.dumper.connector.oracle.OracleStatsQuery.TenantSetup.MULTI_TENANT;
19+
import static com.google.edwmigration.dumper.application.dumper.connector.oracle.QueryGroup.TenantSetup.MULTI_TENANT;
2020
import static java.time.Duration.ofDays;
2121
import static org.junit.Assert.assertEquals;
2222
import static org.junit.Assert.assertTrue;

dumper/app/src/test/java/com/google/edwmigration/dumper/application/dumper/connector/oracle/StatsTaskListGeneratorTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
*/
1717
package com.google.edwmigration.dumper.application.dumper.connector.oracle;
1818

19-
import static com.google.edwmigration.dumper.application.dumper.connector.oracle.OracleStatsQuery.TenantSetup.MULTI_TENANT;
19+
import static com.google.edwmigration.dumper.application.dumper.connector.oracle.QueryGroup.TenantSetup.MULTI_TENANT;
2020
import static java.time.Duration.ofDays;
2121

2222
import com.google.common.collect.ImmutableList;

0 commit comments

Comments
 (0)