Skip to content

Commit 808aa85

Browse files
authored
Merge pull request #4840 from hansva/4834
use databaseMeta.getReservedWords() and fix variable resolver images/url
2 parents 4dc3a34 + d4e1860 commit 808aa85

File tree

8 files changed

+27
-242
lines changed

8 files changed

+27
-242
lines changed

core/src/main/java/org/apache/hop/core/variables/resolver/VariableResolver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
name = "i18n::VariableResolver.name",
3232
description = "i18n::VariableResolver.Description",
3333
image = "ui/images/variable.svg",
34-
documentationUrl = "/metadata-types/variable-resolver.html",
34+
documentationUrl = "/metadata-types/variable-resolver/",
3535
hopMetadataPropertyType = HopMetadataPropertyType.RDBMS_CONNECTION)
3636
@Getter
3737
@Setter

docs/hop-user-manual/modules/ROOT/pages/metadata-types/variable-resolver/pipeline-variable-resolver.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,11 @@ db=db1
6666

6767
We can then have a pipeline that reads and processes the appropriate file per type:
6868

69-
image:metadata-types/variable-resolver/pipeline-variable-resolver-pipeline.png
69+
image::metadata-types/variable-resolver/pipeline-variable-resolver-pipeline.png[]
7070

7171
The Variable Resolver metadata would look like this:
7272

73-
image:metadata-types/variable-resolver/pipeline-variable-resolver-conf.png
73+
image::metadata-types/variable-resolver/pipeline-variable-resolver-conf.png[]
7474

7575

7676
Here are some examples of expressions and the results they give back:

plugins/actions/sql/src/main/java/org/apache/hop/workflow/actions/sql/ActionSqlDialog.java

Lines changed: 4 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,11 @@
1717

1818
package org.apache.hop.workflow.actions.sql;
1919

20-
import java.sql.DatabaseMetaData;
21-
import java.sql.ResultSet;
22-
import java.sql.SQLException;
23-
import java.util.ArrayList;
2420
import java.util.Arrays;
2521
import java.util.List;
2622
import org.apache.hop.core.Const;
2723
import org.apache.hop.core.Props;
28-
import org.apache.hop.core.database.Database;
2924
import org.apache.hop.core.database.DatabaseMeta;
30-
import org.apache.hop.core.exception.HopDatabaseException;
31-
import org.apache.hop.core.logging.LogChannel;
3225
import org.apache.hop.core.util.Utils;
3326
import org.apache.hop.core.variables.IVariables;
3427
import org.apache.hop.i18n.BaseMessages;
@@ -312,48 +305,16 @@ public IAction open() {
312305
private List<String> getSqlReservedWords() {
313306
// Do not search keywords when connection is empty
314307
if (wConnection.getText() == null || wConnection.getText().isEmpty()) {
315-
return new ArrayList<>();
308+
return List.of();
316309
}
317310

318311
// If connection is a variable that can't be resolved
319312
if (variables.resolve(wConnection.getText()).startsWith("${")) {
320-
return new ArrayList<>();
313+
return List.of();
321314
}
322315

323-
DatabaseMeta databaseMeta = wConnection.loadSelectedElement();
324-
if (databaseMeta == null) {
325-
326-
return new ArrayList<>();
327-
}
328-
Database db = new Database(loggingObject, variables, databaseMeta);
329-
DatabaseMetaData databaseMetaData = null;
330-
try {
331-
db.connect();
332-
databaseMetaData = db.getDatabaseMetaData();
333-
if (databaseMetaData == null) {
334-
LogChannel.UI.logError("Couldn't get database metadata");
335-
return new ArrayList<>();
336-
}
337-
List<String> sqlKeywords = new ArrayList<>();
338-
try {
339-
final ResultSet functionsResultSet = databaseMetaData.getFunctions(null, null, null);
340-
while (functionsResultSet.next()) {
341-
sqlKeywords.add(functionsResultSet.getString("FUNCTION_NAME"));
342-
}
343-
sqlKeywords.addAll(Arrays.asList(databaseMetaData.getSQLKeywords().split(",")));
344-
} catch (SQLException e) {
345-
LogChannel.UI.logError(
346-
"Couldn't extract keywords from database metadata. Proceding without them.");
347-
}
348-
return sqlKeywords;
349-
} catch (HopDatabaseException e) {
350-
LogChannel.UI.logError(
351-
"Couldn't extract keywords from database metadata. Proceding without them.");
352-
return new ArrayList<>();
353-
} finally {
354-
db.disconnect();
355-
db.close();
356-
}
316+
DatabaseMeta databaseMeta = workflowMeta.findDatabase(wConnection.getText(), variables);
317+
return Arrays.stream(databaseMeta.getReservedWords()).toList();
357318
}
358319

359320
public void setPosition() {

plugins/actions/waitforsql/src/main/java/org/apache/hop/workflow/actions/waitforsql/ActionWaitForSqlDialog.java

Lines changed: 4 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,13 @@
1717

1818
package org.apache.hop.workflow.actions.waitforsql;
1919

20-
import java.sql.DatabaseMetaData;
21-
import java.sql.ResultSet;
22-
import java.sql.SQLException;
23-
import java.util.ArrayList;
2420
import java.util.Arrays;
2521
import java.util.List;
2622
import org.apache.hop.core.Const;
2723
import org.apache.hop.core.Props;
2824
import org.apache.hop.core.database.Database;
2925
import org.apache.hop.core.database.DatabaseMeta;
30-
import org.apache.hop.core.exception.HopDatabaseException;
3126
import org.apache.hop.core.exception.HopException;
32-
import org.apache.hop.core.logging.LogChannel;
3327
import org.apache.hop.core.row.IRowMeta;
3428
import org.apache.hop.core.row.IValueMeta;
3529
import org.apache.hop.core.util.Utils;
@@ -609,48 +603,16 @@ public void mouseUp(MouseEvent e) {
609603
private List<String> getSqlReservedWords() {
610604
// Do not search keywords when connection is empty
611605
if (wConnection.getText() == null || wConnection.getText().isEmpty()) {
612-
return new ArrayList<>();
606+
return List.of();
613607
}
614608

615609
// If connection is a variable that can't be resolved
616610
if (variables.resolve(wConnection.getText()).startsWith("${")) {
617-
return new ArrayList<>();
611+
return List.of();
618612
}
619613

620-
DatabaseMeta databaseMeta = wConnection.loadSelectedElement();
621-
if (databaseMeta == null) {
622-
623-
return new ArrayList<>();
624-
}
625-
Database db = new Database(loggingObject, variables, databaseMeta);
626-
DatabaseMetaData databaseMetaData = null;
627-
try {
628-
db.connect();
629-
databaseMetaData = db.getDatabaseMetaData();
630-
if (databaseMetaData == null) {
631-
LogChannel.UI.logError("Couldn't get database metadata");
632-
return new ArrayList<>();
633-
}
634-
List<String> sqlKeywords = new ArrayList<>();
635-
try {
636-
final ResultSet functionsResultSet = databaseMetaData.getFunctions(null, null, null);
637-
while (functionsResultSet.next()) {
638-
sqlKeywords.add(functionsResultSet.getString("FUNCTION_NAME"));
639-
}
640-
sqlKeywords.addAll(Arrays.asList(databaseMetaData.getSQLKeywords().split(",")));
641-
} catch (SQLException e) {
642-
LogChannel.UI.logError(
643-
"Couldn't extract keywords from database metadata. Proceding without them.");
644-
}
645-
return sqlKeywords;
646-
} catch (HopDatabaseException e) {
647-
LogChannel.UI.logError(
648-
"Couldn't extract keywords from database metadata. Proceding without them.");
649-
return new ArrayList<>();
650-
} finally {
651-
db.disconnect();
652-
db.close();
653-
}
614+
DatabaseMeta databaseMeta = workflowMeta.findDatabase(wConnection.getText(), variables);
615+
return Arrays.stream(databaseMeta.getReservedWords()).toList();
654616
}
655617

656618
private void getSql() {

plugins/transforms/databasejoin/src/main/java/org/apache/hop/pipeline/transforms/databasejoin/DatabaseJoinDialog.java

Lines changed: 5 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,12 @@
1717

1818
package org.apache.hop.pipeline.transforms.databasejoin;
1919

20-
import java.sql.DatabaseMetaData;
21-
import java.sql.ResultSet;
22-
import java.sql.SQLException;
2320
import java.util.ArrayList;
2421
import java.util.Arrays;
2522
import java.util.List;
2623
import org.apache.hop.core.Const;
2724
import org.apache.hop.core.Props;
28-
import org.apache.hop.core.database.Database;
2925
import org.apache.hop.core.database.DatabaseMeta;
30-
import org.apache.hop.core.exception.HopDatabaseException;
3126
import org.apache.hop.core.exception.HopException;
3227
import org.apache.hop.core.row.IRowMeta;
3328
import org.apache.hop.core.row.value.ValueMetaFactory;
@@ -425,49 +420,18 @@ public void widgetSelected(SelectionEvent e) {
425420
}
426421

427422
private List<String> getSqlReservedWords() {
428-
429423
// Do not search keywords when connection is empty
430-
if (wConnection.getText() == null || wConnection.getText().isEmpty()) {
431-
return new ArrayList<>();
424+
if (input.getConnection() == null || input.getConnection().isEmpty()) {
425+
return List.of();
432426
}
433427

434428
// If connection is a variable that can't be resolved
435-
if (variables.resolve(wConnection.getText()).startsWith("${")) {
436-
return new ArrayList<>();
429+
if (variables.resolve(input.getConnection()).startsWith("${")) {
430+
return List.of();
437431
}
438432

439433
DatabaseMeta databaseMeta = pipelineMeta.findDatabase(input.getConnection(), variables);
440-
if (databaseMeta == null) {
441-
logError("Database connection not found. Proceding without keywords.");
442-
return new ArrayList<>();
443-
}
444-
Database db = new Database(loggingObject, variables, databaseMeta);
445-
DatabaseMetaData databaseMetaData = null;
446-
try {
447-
db.connect();
448-
databaseMetaData = db.getDatabaseMetaData();
449-
if (databaseMetaData == null) {
450-
logError("Couldn't get database metadata");
451-
return new ArrayList<>();
452-
}
453-
List<String> sqlKeywords = new ArrayList<>();
454-
try {
455-
final ResultSet functionsResultSet = databaseMetaData.getFunctions(null, null, null);
456-
while (functionsResultSet.next()) {
457-
sqlKeywords.add(functionsResultSet.getString("FUNCTION_NAME"));
458-
}
459-
sqlKeywords.addAll(Arrays.asList(databaseMetaData.getSQLKeywords().split(",")));
460-
} catch (SQLException e) {
461-
logError("Couldn't extract keywords from database metadata. Proceding without them.");
462-
}
463-
return sqlKeywords;
464-
} catch (HopDatabaseException e) {
465-
logError("Couldn't extract keywords from database metadata. Proceding without them.");
466-
return new ArrayList<>();
467-
} finally {
468-
db.disconnect();
469-
db.close();
470-
}
434+
return Arrays.stream(databaseMeta.getReservedWords()).toList();
471435
}
472436

473437
private void enableFields() {

plugins/transforms/dynamicsqlrow/src/main/java/org/apache/hop/pipeline/transforms/dynamicsqlrow/DynamicSqlRowDialog.java

Lines changed: 5 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,11 @@
1717

1818
package org.apache.hop.pipeline.transforms.dynamicsqlrow;
1919

20-
import java.sql.DatabaseMetaData;
21-
import java.sql.ResultSet;
22-
import java.sql.SQLException;
23-
import java.util.ArrayList;
2420
import java.util.Arrays;
2521
import java.util.List;
2622
import org.apache.hop.core.Const;
2723
import org.apache.hop.core.Props;
28-
import org.apache.hop.core.database.Database;
2924
import org.apache.hop.core.database.DatabaseMeta;
30-
import org.apache.hop.core.exception.HopDatabaseException;
3125
import org.apache.hop.core.exception.HopException;
3226
import org.apache.hop.core.row.IRowMeta;
3327
import org.apache.hop.core.util.Utils;
@@ -372,47 +366,17 @@ public void mouseUp(MouseEvent e) {
372366

373367
private List<String> getSqlReservedWords() {
374368
// Do not search keywords when connection is empty
375-
if (wConnection.getText() == null || wConnection.getText().isEmpty()) {
376-
return new ArrayList<>();
369+
if (input.getConnection() == null || input.getConnection().isEmpty()) {
370+
return List.of();
377371
}
378372

379373
// If connection is a variable that can't be resolved
380-
if (variables.resolve(wConnection.getText()).startsWith("${")) {
381-
return new ArrayList<>();
374+
if (variables.resolve(input.getConnection()).startsWith("${")) {
375+
return List.of();
382376
}
383377

384378
DatabaseMeta databaseMeta = pipelineMeta.findDatabase(input.getConnection(), variables);
385-
if (databaseMeta == null) {
386-
logError("Database connection not found. Proceding without keywords.");
387-
return new ArrayList<>();
388-
}
389-
Database db = new Database(loggingObject, variables, databaseMeta);
390-
DatabaseMetaData databaseMetaData = null;
391-
try {
392-
db.connect();
393-
databaseMetaData = db.getDatabaseMetaData();
394-
if (databaseMetaData == null) {
395-
logError("Couldn't get database metadata");
396-
return new ArrayList<>();
397-
}
398-
List<String> sqlKeywords = new ArrayList<>();
399-
try {
400-
final ResultSet functionsResultSet = databaseMetaData.getFunctions(null, null, null);
401-
while (functionsResultSet.next()) {
402-
sqlKeywords.add(functionsResultSet.getString("FUNCTION_NAME"));
403-
}
404-
sqlKeywords.addAll(Arrays.asList(databaseMetaData.getSQLKeywords().split(",")));
405-
} catch (SQLException e) {
406-
logError("Couldn't extract keywords from database metadata. Proceding without them.");
407-
}
408-
return sqlKeywords;
409-
} catch (HopDatabaseException e) {
410-
logError("Couldn't extract keywords from database metadata. Proceding without them.");
411-
return new ArrayList<>();
412-
} finally {
413-
db.disconnect();
414-
db.close();
415-
}
379+
return Arrays.stream(databaseMeta.getReservedWords()).toList();
416380
}
417381

418382
public void setPosition() {

plugins/transforms/sql/src/main/java/org/apache/hop/pipeline/transforms/sql/ExecSqlDialog.java

Lines changed: 5 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,11 @@
1717

1818
package org.apache.hop.pipeline.transforms.sql;
1919

20-
import java.sql.DatabaseMetaData;
21-
import java.sql.ResultSet;
22-
import java.sql.SQLException;
2320
import java.util.ArrayList;
2421
import java.util.Arrays;
2522
import java.util.List;
2623
import org.apache.hop.core.Props;
27-
import org.apache.hop.core.database.Database;
2824
import org.apache.hop.core.database.DatabaseMeta;
29-
import org.apache.hop.core.exception.HopDatabaseException;
3025
import org.apache.hop.core.exception.HopException;
3126
import org.apache.hop.core.row.IRowMeta;
3227
import org.apache.hop.core.util.Utils;
@@ -563,47 +558,17 @@ public void widgetSelected(SelectionEvent e) {
563558

564559
private List<String> getSqlReservedWords() {
565560
// Do not search keywords when connection is empty
566-
if (wConnection.getText() == null || wConnection.getText().isEmpty()) {
567-
return new ArrayList<>();
561+
if (input.getConnection() == null || input.getConnection().isEmpty()) {
562+
return List.of();
568563
}
569564

570565
// If connection is a variable that can't be resolved
571-
if (variables.resolve(wConnection.getText()).startsWith("${")) {
572-
return new ArrayList<>();
566+
if (variables.resolve(input.getConnection()).startsWith("${")) {
567+
return List.of();
573568
}
574569

575570
DatabaseMeta databaseMeta = pipelineMeta.findDatabase(input.getConnection(), variables);
576-
if (databaseMeta == null) {
577-
logError("Database connection not found. Proceding without keywords.");
578-
return new ArrayList<>();
579-
}
580-
Database db = new Database(loggingObject, variables, databaseMeta);
581-
DatabaseMetaData databaseMetaData = null;
582-
try {
583-
db.connect();
584-
databaseMetaData = db.getDatabaseMetaData();
585-
if (databaseMetaData == null) {
586-
logError("Couldn't get database metadata");
587-
return new ArrayList<>();
588-
}
589-
List<String> sqlKeywords = new ArrayList<>();
590-
try {
591-
final ResultSet functionsResultSet = databaseMetaData.getFunctions(null, null, null);
592-
while (functionsResultSet.next()) {
593-
sqlKeywords.add(functionsResultSet.getString("FUNCTION_NAME"));
594-
}
595-
sqlKeywords.addAll(Arrays.asList(databaseMetaData.getSQLKeywords().split(",")));
596-
} catch (SQLException e) {
597-
logError("Couldn't extract keywords from database metadata. Proceding without them.");
598-
}
599-
return sqlKeywords;
600-
} catch (HopDatabaseException e) {
601-
logError("Couldn't extract keywords from database metadata. Proceding without them.");
602-
return new ArrayList<>();
603-
} finally {
604-
db.disconnect();
605-
db.close();
606-
}
571+
return Arrays.stream(databaseMeta.getReservedWords()).toList();
607572
}
608573

609574
private void setExecutedEachInputRow() {

0 commit comments

Comments
 (0)