Skip to content
Permalink

Comparing changes

This is a direct comparison between two commits made in this repository or its related repositories. View the default comparison for this range or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: liquibase/liquibase-mongodb
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 50fd757a972294b831d51bcf9af9058f547996a8
Choose a base ref
..
head repository: liquibase/liquibase-mongodb
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 63887774ae585b5341678895abccbf73cdd20b27
Choose a head ref
Showing with 6,439 additions and 2,373 deletions.
  1. +46 −25 README.md
  2. +38 −4 pom.xml
  3. +90 −0 src/main/java/liquibase/ext/mongodb/changelog/AdjustChangeLogCollectionStatement.java
  4. +0 −87 src/main/java/liquibase/ext/mongodb/changelog/ChangeSetUtils.java
  5. +71 −49 src/main/java/liquibase/ext/mongodb/changelog/CreateChangeLogCollectionStatement.java
  6. +71 −0 src/main/java/liquibase/ext/mongodb/changelog/GetMaxChangeSetSequenceStatement.java
  7. +137 −193 src/main/java/liquibase/ext/mongodb/changelog/MongoHistoryService.java
  8. +51 −0 src/main/java/liquibase/ext/mongodb/changelog/MongoRanChangeSet.java
  9. +113 −0 src/main/java/liquibase/ext/mongodb/changelog/MongoRanChangeSetToDocumentConverter.java
  10. +62 −0 src/main/java/liquibase/ext/mongodb/configuration/MongoConfiguration.java
  11. +0 −74 src/main/java/liquibase/ext/mongodb/database/DropCollectionsCommand.java
  12. +34 −98 src/main/java/liquibase/ext/mongodb/database/MongoConnection.java
  13. +41 −475 src/main/java/liquibase/ext/mongodb/database/MongoLiquibaseDatabase.java
  14. +0 −204 src/main/java/liquibase/ext/mongodb/executor/MongoExecutor.java
  15. +62 −0 src/main/java/liquibase/ext/mongodb/lockservice/AdjustChangeLogLockCollectionStatement.java
  16. +74 −0 src/main/java/liquibase/ext/mongodb/lockservice/CreateChangeLogLockCollectionStatement.java
  17. +0 −60 src/main/java/liquibase/ext/mongodb/lockservice/CreateChangelogLockCollectionStatement.java
  18. +25 −62 src/main/java/liquibase/ext/mongodb/lockservice/MongoChangeLogLock.java
  19. +85 −0 src/main/java/liquibase/ext/mongodb/lockservice/MongoChangeLogLockToDocumentConverter.java
  20. +45 −254 src/main/java/liquibase/ext/mongodb/lockservice/MongoLockService.java
  21. +80 −0 src/main/java/liquibase/ext/mongodb/lockservice/ReplaceChangeLogLockStatement.java
  22. +0 −88 src/main/java/liquibase/ext/mongodb/lockservice/ReplaceLockChangeLogStatement.java
  23. +59 −0 src/main/java/liquibase/ext/mongodb/lockservice/SelectChangeLogLockStatement.java
  24. +0 −58 src/main/java/liquibase/ext/mongodb/lockservice/SelectLockChangeLogStatement.java
  25. +41 −0 src/main/java/liquibase/ext/mongodb/statement/AbstractCollectionStatement.java
  26. +8 −5 src/main/java/liquibase/ext/mongodb/statement/AbstractMongoDocumentStatement.java
  27. +0 −63 src/main/java/liquibase/ext/mongodb/statement/AbstractMongoStatement.java
  28. +7 −18 src/main/java/liquibase/ext/mongodb/statement/AdminCommandStatement.java
  29. +53 −6 src/main/java/liquibase/ext/mongodb/statement/BsonUtils.java
  30. +13 −20 src/main/java/liquibase/ext/mongodb/statement/CountCollectionByNameStatement.java
  31. +31 −14 src/main/java/liquibase/ext/mongodb/statement/CountDocumentsInCollectionStatement.java
  32. +17 −41 src/main/java/liquibase/ext/mongodb/statement/CreateCollectionStatement.java
  33. +17 −27 src/main/java/liquibase/ext/mongodb/statement/CreateIndexStatement.java
  34. +76 −0 src/main/java/liquibase/ext/mongodb/statement/DeleteManyStatement.java
  35. +9 −15 src/main/java/liquibase/ext/mongodb/statement/DropAllCollectionsStatement.java
  36. +18 −12 src/main/java/liquibase/ext/mongodb/statement/DropCollectionStatement.java
  37. +28 −30 src/main/java/liquibase/ext/mongodb/statement/FindAllStatement.java
  38. +19 −23 src/main/java/liquibase/ext/mongodb/statement/InsertManyStatement.java
  39. +17 −21 src/main/java/liquibase/ext/mongodb/statement/InsertOneStatement.java
  40. +13 −12 src/main/java/liquibase/ext/mongodb/statement/RunCommandStatement.java
  41. +79 −0 src/main/java/liquibase/ext/mongodb/statement/UpdateManyStatement.java
  42. +288 −0 src/main/java/liquibase/nosql/changelog/AbstractNoSqlHistoryService.java
  43. +52 −0 src/main/java/liquibase/nosql/changelog/AbstractNoSqlItemToDocumentConverter.java
  44. +99 −0 src/main/java/liquibase/nosql/database/AbstractNoSqlConnection.java
  45. +432 −0 src/main/java/liquibase/nosql/database/AbstractNoSqlDatabase.java
  46. +218 −0 src/main/java/liquibase/nosql/executor/NoSqlExecutor.java
  47. +8 −8 ...java/liquibase/{ext/mongodb/executor/MongoSqlGenerator.java → nosql/executor/NoSqlGenerator.java}
  48. +327 −0 src/main/java/liquibase/nosql/lockservice/AbstractNoSqlLockService.java
  49. +217 −0 src/main/java/liquibase/nosql/parser/json/JsonNoSqlChangeLogParser.java
  50. +52 −0 src/main/java/liquibase/nosql/statement/AbstractNoSqlStatement.java
  51. +29 −0 src/main/java/liquibase/nosql/statement/NoSqlExecuteStatement.java
  52. +31 −0 src/main/java/liquibase/nosql/statement/NoSqlQueryForListStatement.java
  53. +30 −0 src/main/java/liquibase/nosql/statement/NoSqlQueryForLongStatement.java
  54. +29 −0 src/main/java/liquibase/nosql/statement/NoSqlQueryForObjectStatement.java
  55. +29 −0 src/main/java/liquibase/nosql/statement/NoSqlUpdateStatement.java
  56. +1 −1 src/main/resources/META-INF/services/liquibase.executor.Executor
  57. +1 −0 src/main/resources/META-INF/services/liquibase.parser.ChangeLogParser
  58. +1 −1 src/main/resources/META-INF/services/liquibase.sqlgenerator.SqlGenerator
  59. +37 −32 src/test/java/liquibase/ext/AbstractMongoIntegrationTest.java
  60. +11 −15 src/test/java/liquibase/ext/MongoLiquibaseCreateDropUsersIT.java
  61. +69 −10 src/test/java/liquibase/ext/MongoLiquibaseIT.java
  62. +137 −0 src/test/java/liquibase/ext/MongoLiquibaseJsonIT.java
  63. +15 −15 src/test/java/liquibase/ext/mongodb/TestUtils.java
  64. +47 −14 src/test/java/liquibase/ext/mongodb/change/CreateCollectionChangeTest.java
  65. +286 −0 src/test/java/liquibase/ext/mongodb/changelog/AdjustChangeLogCollectionStatementIT.java
  66. +11 −0 src/test/java/liquibase/ext/mongodb/changelog/CreateChangeLogCollectionStatementIT.java
  67. +179 −102 src/test/java/liquibase/ext/mongodb/changelog/MongoHistoryServiceIT.java
  68. +455 −0 src/test/java/liquibase/ext/mongodb/changelog/MongoHistoryServiceTest.java
  69. +70 −0 src/test/java/liquibase/ext/mongodb/changelog/MongoRanChangeSetToDocumentConverterTest.java
  70. +99 −0 src/test/java/liquibase/ext/mongodb/configuration/MongoConfigurationTest.java
  71. +100 −0 src/test/java/liquibase/ext/mongodb/database/MongoLiquibaseDatabaseTest.java
  72. +5 −10 src/test/java/liquibase/ext/mongodb/executor/{MongoExecutorIT.java → NoSqlExecutorIT.java}
  73. +272 −0 src/test/java/liquibase/ext/mongodb/lockservice/AdjustChangeLogLockCollectionStatementIT.java
  74. +72 −38 src/test/java/liquibase/ext/mongodb/lockservice/MongoLockServiceIT.java
  75. +710 −0 src/test/java/liquibase/ext/mongodb/lockservice/MongoLockServiceTest.java
  76. +4 −4 ...odb/lockservice/{ReplaceLockChangeLogStatementTest.java → ReplaceChangeLogLockStatementTest.java}
  77. +3 −3 ...ngodb/lockservice/{SelectLockChangeLogStatementTest.java → SelectChangeLogLockStatementTest.java}
  78. +25 −5 src/test/java/liquibase/ext/mongodb/statement/BsonUtilsTest.java
  79. +3 −3 src/test/java/liquibase/ext/mongodb/statement/CountCollectionByNameStatementIT.java
  80. +3 −3 src/test/java/liquibase/ext/mongodb/statement/CountDocumentsInCollectionStatementTest.java
  81. +2 −2 src/test/java/liquibase/ext/mongodb/statement/CreateCollectionStatementIT.java
  82. +2 −2 src/test/java/liquibase/ext/mongodb/statement/CreateIndexStatementIT.java
  83. +2 −2 src/test/java/liquibase/ext/mongodb/statement/DropAllCollectionsStatementIT.java
  84. +2 −2 src/test/java/liquibase/ext/mongodb/statement/DropCollectionStatementIT.java
  85. +5 −10 src/test/java/liquibase/ext/mongodb/statement/FindAllStatementIT.java
  86. +6 −7 src/test/java/liquibase/ext/mongodb/statement/InsertManyStatementIT.java
  87. +11 −12 src/test/java/liquibase/ext/mongodb/statement/InsertOneStatementIT.java
  88. +57 −29 src/test/java/liquibase/ext/mongodb/statement/MongoStatementIT.java
  89. +4 −4 src/test/java/liquibase/ext/mongodb/statement/RunCommandStatementIT.java
  90. +35 −0 src/test/java/liquibase/nosql/parser/json/JsonNoSqlChangeLogParserTest.java
  91. +1 −1 src/test/resources/application-test.properties
  92. +53 −0 src/test/resources/liquibase/ext/json/changelog.generic.json
  93. +9 −0 src/test/resources/liquibase/ext/json/generic-0-main-1.json
  94. +14 −0 src/test/resources/liquibase/ext/json/generic-0-main-2.json
  95. +86 −0 src/test/resources/liquibase/ext/json/generic-1-insert-people.json
  96. +63 −0 src/test/resources/liquibase/ext/json/generic-2-update-people.json
71 changes: 46 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
@@ -5,6 +5,7 @@
## Table of contents

1. [Introduction](#introduction)
1. [Release Notes](#release-notes)
1. [Implemented Changes](#implemented-changes)
1. [Getting Started](#getting-started)
1. [Running tests](#running-tests)
@@ -23,6 +24,39 @@ Majority of them are basically wrappers over [`db.eval`](https://docs.mongodb.co
In order to call specific `mongo-java-driver` specific methods,
Liquibase turned to be the most feasible tool to extend as it allows to define change sets to fit driver methods arguments.

<a name="release-notes"></a>
## Release Notes
####4.1.2
* Added NoSql JSON Parser which can pass raw JSON for a property like this:
```json
{
"options" :
{
"$rawJson" : { ... }
}
}
```
* New properties added
```properties
# If disabled can be used on API which do not support validators (Azure Cosmos DB with Mongo API, Amazon DocumentDB)
liquibase.mongodb.supportsValidator=true
# If enabled will adjust indexes and validators for Liquibase tracking tables LOCK and CHANGELOG. Can be disabled if sure Liquibase not updated.
liquibase.mongodb.adjustTrackingTablesOnStartup=true
```
* Overridden Liquibase table names removed. Now will be used the default ones in Liquibase. If previous releases used then table names should be explicitly passed as parameters.
Currently, by default as Liquibase default :`DATABASECHANGELOGLOCK, DATABASECHANGELOG`
Previous releases used by default : `databaseChangeLogLock, databaseChangeLog`
####4.1.1
* Support for Liquibase 4.1.1
####4.1.0
* Support for Liquibase 4.1.0
####4.0.0
* Works with Liquibase v4.0.0
####3.10.0
* Support for Liquibase 3.10
####3.9.0
* First release

<a name="implemented-changes"></a>
## Implemented Changes:

@@ -49,7 +83,7 @@ These instructions will get you a copy of the project up and running on your loc
### Prerequisites

```
mongo-java-driver:3.10.2
mongo-java-driver:3.12.7
```

### Installing
@@ -63,11 +97,11 @@ mongo-java-driver:3.10.2
### Adjust connection string

Connection url can be adjusted here: [`db.connection.uri`](./src/test/resources/application-test.properties)
Integration tests are run by enabling `run-its` profile
Run Integration tests by enabling `run-its` profile

### Run integration tests

```
```shell script
mvn clean install -Prun-its
```

@@ -76,36 +110,23 @@ mvn clean install -Prun-its

### Add dependency:

```
```xml
<dependency>
<groupId>org.liquibase.ext</groupId>
<artifactId>liquibase-mongodb</artifactId>
<version>${liquibase-mongodb.version}</version>
</dependency>
```
### Java call:
```java
public class Application {
public static void main(String[] args) {
MongoLiquibaseDatabase database = (MongoLiquibaseDatabase) DatabaseFactory.getInstance().openDatabase(url, null, null, null, null);;
iquibase liquibase = new Liquibase("liquibase/ext/changelog.generic.test.xml", new ClassLoaderResourceAccessor(), database);
liquibase.update("");
}
}
```
MongoConnection mongoConnection;
MongoExecutor mongoExecutor;
MongoLiquibaseDatabase database;
mongoConnection = new MongoConnection("mongodb://localhost:27017/test_db?socketTimeoutMS=100&connectTimeoutMS=100&serverSelectionTimeoutMS=100");
//Can be achieved by excluding the package to scan or pass package list via system.parameter
//ServiceLocator.getInstance().getPackages().remove("liquibase.executor");
//Another way is to register the executor against a Db
database = (MongoLiquibaseDatabase) DatabaseFactory.getInstance().findCorrectDatabaseImplementation(mongoConnection);
database.setConnection(mongoConnection);
mongoExecutor = new MongoExecutor();
mongoExecutor.setDatabase(database);
ExecutorService.getInstance().setExecutor(database, mongoExecutor);
final Liquibase liquibase = new Liquibase("liquibase/ext/changelog.create-users.test.xml", new ClassLoaderResourceAccessor(), database);
liquibase.update("{}");
```

<a name="contributing"></a>
## Contributing
42 changes: 38 additions & 4 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -40,7 +40,10 @@
<liquibase.version>4.1.1</liquibase.version>
<jupiter.version>5.7.0</jupiter.version>
<jupiter.surefire.version>1.3.2</jupiter.surefire.version>
<mockito-core.version>3.3.3</mockito-core.version>
<mockito-junit-jupiter.version>3.3.3</mockito-junit-jupiter.version>
<mongodb-driver.version>3.12.7</mongodb-driver.version>
<commons-lang3.version>3.10</commons-lang3.version>
<lombok.version>1.18.16</lombok.version>
<hamcrest.version>1.3</hamcrest.version>
<assertj.version>3.17.2</assertj.version>
@@ -51,6 +54,8 @@
<license.trimHeaderLine>true</license.trimHeaderLine>
<license-maven-plugin.version>2.0.0</license-maven-plugin.version>
<maven-help-plugin.version>3.2.0</maven-help-plugin.version>
<jackson-core.version>2.11.2</jackson-core.version>
<snakeyaml.version>1.12</snakeyaml.version>
</properties>
<dependencies>
<dependency>
@@ -63,25 +68,42 @@
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>${mongodb-driver.version}</version>
<scope>provided</scope>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-core</artifactId>
<version>${mongodb-driver.version}</version>
<scope>provided</scope>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>bson</artifactId>
<version>${mongodb-driver.version}</version>
<scope>provided</scope>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>${mongodb-driver.version}</version>
<scope>provided</scope>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson-core.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson-core.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
@@ -118,6 +140,18 @@
<version>${assertj.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>${mockito-core.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>${mockito-junit-jupiter.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<testResources>
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package liquibase.ext.mongodb.changelog;

/*-
* #%L
* Liquibase MongoDB Extension
* %%
* Copyright (C) 2019 Mastercard
* %%
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/

import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.IndexOptions;
import liquibase.ext.mongodb.database.MongoConnection;
import liquibase.ext.mongodb.statement.RunCommandStatement;
import lombok.Getter;
import org.bson.Document;

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

import static java.lang.Boolean.TRUE;

public class AdjustChangeLogCollectionStatement extends RunCommandStatement {

public static final String UI = "ui_";
public static String OPTIONS = "{ collMod: \"%s\"," + CreateChangeLogCollectionStatement.VALIDATOR + "}";

public static final String COMMAND_NAME = "adjustChangeLogCollection";

@Getter
private final String collectionName;
@Getter
private final Boolean supportsValidator;

public AdjustChangeLogCollectionStatement(final String collectionName) {
this(collectionName, TRUE);
}

public AdjustChangeLogCollectionStatement(final String collectionName, Boolean supportsValidator) {
super(String.format(OPTIONS, collectionName));
this.collectionName = collectionName;
this.supportsValidator = supportsValidator;
}

@Override
public String getCommandName() {
return COMMAND_NAME;
}

@Override
public void execute(final MongoConnection connection) {

adjustIndexes(connection);

if (TRUE.equals(supportsValidator)) {
super.execute(connection);
}
}

private void adjustIndexes(final MongoConnection connection) {
final MongoCollection<Document> collection = connection.getDatabase().getCollection(getCollectionName());
List<Document> indexes = new ArrayList<>();
collection.listIndexes().into(indexes);
// Only default _id_ exists
if (indexes.size() == 1) {
final Document keys = new Document()
.append(MongoRanChangeSet.Fields.fileName, 1)
.append(MongoRanChangeSet.Fields.author, 1)
.append(MongoRanChangeSet.Fields.changeSetId, 1);

final IndexOptions options = new IndexOptions()
.name(UI + getCollectionName())
.unique(true);

collection.createIndex(keys, options);
}
}
}
87 changes: 0 additions & 87 deletions src/main/java/liquibase/ext/mongodb/changelog/ChangeSetUtils.java

This file was deleted.

Loading