2013-11-14 5 views
8

Wenn wir Migrationen haben wie:Wie sortiert der Flyway Versionsnummern?

V1_6__six.sql 
V1_7__seven.sql 
V1_8__eight.sql 
V1_9__nine.sql 

Was sollten wir für die nächste Version verwenden?

Wenn wir verwenden, kommt das nach V1__9? Oder müssten wir den einstelligen Versionsnummern eine 0 voranstellen?

Eigentlich ist die Frage: sind Versionsnummern numerisch oder alphabetisch sortiert?

Antwort

6

In einem Wort: numerisch. Wie wäre es für eine Nummer erwartet.

+0

Ich möchte den 'sortierenden Teil' wiederverwenden. Welche Datei sollte ich anschauen? – piotrek

+0

@ Axel-Fontaine - das scheint nicht der Fall genau zu sein, es sei denn, ich missverstehe das: '1.1.015 | blah1 | | Ausstehend | 1.2.001 | blah2 | | Ausstehend | 1.2.1.001 | blah3 | | Ausstehend | 1.2.1.002 | blah4 | | Ausstehend | 1.2.002 | blah7 | | Ausstehend | 1.2.003 | blah8 | | Ausstehend | ' –

+0

Entschuldigung - Kann nicht die Formatierung auf der rechten Seite: http://pastebin.com/7uvXVsqT –

0

Für eine definitive Antwort auf, wie die Sortierung geschieht, können Sie auf den Code verweisen. Diese test ist besonders hilfreich.

@Test 
public void testNumber() { 
    final MigrationVersion a1 = MigrationVersion.fromVersion("1.2.13.3"); 
    final MigrationVersion a2 = MigrationVersion.fromVersion("1.2.3.3"); 
    assertTrue(a1.compareTo(a2) > 0); 
} 

@Test 
public void testLength1() { 
    final MigrationVersion a1 = MigrationVersion.fromVersion("1.2.1.3"); 
    final MigrationVersion a2 = MigrationVersion.fromVersion("1.2.1"); 
    assertTrue(a1.compareTo(a2) > 0); 
} 

@Test 
public void testLength2() { 
    final MigrationVersion a1 = MigrationVersion.fromVersion("1.2.1"); 
    final MigrationVersion a2 = MigrationVersion.fromVersion("1.2.1.1"); 
    assertTrue(a1.compareTo(a2) < 0); 
} 

@Test 
public void leadingZeroes() { 
    final MigrationVersion v1 = MigrationVersion.fromVersion("1.0"); 
    final MigrationVersion v2 = MigrationVersion.fromVersion("001.0"); 
    assertTrue(v1.compareTo(v2) == 0); 
    assertTrue(v1.equals(v2)); 
    assertEquals(v1.hashCode(), v2.hashCode()); 
}