if exists for Column and Index Migrations in MySQL

Unfortunately MySQL does not provide an SQL statement for conditionally creating a column if it does not already exist. There also does not appear to be an easy way for dropping a column without causing an error if the column doesn’t exist. The same problem also applies to indices. This functionality however is commonly used for idempotent schema updates. Without stored procedures which take care of the changes you are lost. I would like to share a Gist on GitHub which helps for the following schema migrations:

  • Drop index if exists
  • Create index if not exists
  • Create unique index if not exists
  • Drop column if exists
  • Add column if not exists

I am using the INFORMATION_SCHEMA tables for testing for the existence of columns and indices. No special grant is necessary to query from those tables. The stored procedures have the following signature:

Drop index if exists
m_drop_index(table_name, index_name)

Create index if not exists
m_create_index(table_name, index_name, index_columns)

Create unique index if not exists
m_create_unique_index(table_name, index_name, index_columns)

Drop column if exists
m_drop_column(table_name, column_name)

Add column if not exists
m_add_column(table_name, column_name, column_definition)

After importing, you can use them instead of MySQL’s ALTER statements. Here is an example for adding the name column to the table person:

mysql> CALL m_add_column('person', 'name', 'varchar(255)');
Eric Lippmann

Autor: Eric Lippmann

Eric kam während seines ersten Lehrjahres zu NETWAYS und hat seine Ausbildung bereits 2011 sehr erfolgreich abgeschlossen. Seit Beginn arbeitet er in der Softwareentwicklung und dort an den unterschiedlichen NETWAYS Open Source Lösungen, insbesondere inGraph und im Icinga Team an Icinga Web. Darüber hinaus zeichnet er sich für viele Kundenentwicklungen in der Finanz- und Automobilbranche verantwortlich.

Funktionales Programmieren in PHP

Letztens bin ich auf Github auf ein interessantes Projekt gestoßen, das ich euch nicht vorenthalten möchte. Ihor Burlachenko bietet mit PHP NSPL eine großartige Bibliothek, um alltägliche Programmieraufgaben elegant und funktional zu lösen. Sein Projekt auf Github ist ausführlich dokumentiert und bietet einige Beispiele. Also am besten gleich vorbeischauen oder hier den ersten Eindruck gewinnen:

// Get user ids
 
// NSPL
$userIds = map(propertyGetter('id'), $users);
 
// vs PHP
$userIds = array_map(
    function ($user) {
        return $user->id;
    },
    $users
);
 
// Filter active users
 
// NSPL
$activeUsers = filter(methodCaller('isActive'), $users);
 
// vs PHP
$activeUsers = array_filter(
    $users,
    function ($user) {
        return $user->isActive();
    }
);

Eric Lippmann

Autor: Eric Lippmann

Eric kam während seines ersten Lehrjahres zu NETWAYS und hat seine Ausbildung bereits 2011 sehr erfolgreich abgeschlossen. Seit Beginn arbeitet er in der Softwareentwicklung und dort an den unterschiedlichen NETWAYS Open Source Lösungen, insbesondere inGraph und im Icinga Team an Icinga Web. Darüber hinaus zeichnet er sich für viele Kundenentwicklungen in der Finanz- und Automobilbranche verantwortlich.

Eigene Icon-Fonts erstellen

fontello Icon-Fonts erfreuen sich in der Webentwicklung großer Beliebtheit, weil sie gegenüber der klassischen Icon-Implementationen eine ganze Reihe an Vorteilen bieten. Zum Beispiel kann man die Farbe ohne große Umstände im CSS ändern, anstatt ein Tool zur Bildbearbeitung bemühen zu müssen. Auch die Skalierbarkeit und das Hinzufügen von Effekten ist mit Icon-Fonts viel einfacher.

Nun gibt es aber viele Icon-Fonts, die verwendet werden können und sicherlich braucht man nicht immer alle Icons, die geboten werden oder befindet einen Icon-Font als nicht ausreichend. Da wäre es doch toll, sich einen eigenen Icon-Font erstellen zu können. Und das geht ganz einfach mit dem online Icon-Font-Generator fontello, bei dem man sich Icons aus bekannten Icon-Fonts wie Font Awesome und Elusive zusammenklickt und dann herunterlädt.

Das generierte Archiv enthält den Icon-Font in verschiedenen Formaten, CSS um die Icon-Klassen direkt benutzen zu können und eine Konfigurationsdatei, die man in fontello wieder importieren kann, um den Icon-Font anzupassen.

Eric Lippmann

Autor: Eric Lippmann

Eric kam während seines ersten Lehrjahres zu NETWAYS und hat seine Ausbildung bereits 2011 sehr erfolgreich abgeschlossen. Seit Beginn arbeitet er in der Softwareentwicklung und dort an den unterschiedlichen NETWAYS Open Source Lösungen, insbesondere inGraph und im Icinga Team an Icinga Web. Darüber hinaus zeichnet er sich für viele Kundenentwicklungen in der Finanz- und Automobilbranche verantwortlich.

Vagrant und Parallels

Mittlerweile nutzen wir in fast jedem Projekt Vagrant um unsere Entwicklungsumgebungen zu kontrollieren. Während unter Linux VirtualBox für die virtuellen Maschinen herhalten muss, ist es unter Mac OS X Parallels. VirtualBox würde zwar auch funktionieren, ist aber einfach nicht so performant wie Parallels.
Wenn Vagrant und Parallels bereits installiert sind, ist die Konfiguration und Benutzung von Vagrant mit Parallels ganz einfach:

Parallels Provider für Vagrant installieren:

vagrant plugin install vagrant-parallels

Beispielkonfiguration für Parallels im Vagrantfile:

config.vm.provider :parallels do |p, override|
  # Use a different image for Parallels
  override.vm.box = "parallels-box"
 
  # Name of the VM in Parallels
  p.name = "Blogpost"
 
  # Update Parallels Tools automatically
  p.update_guest_tools = true
 
  # Set power consumption mode to "Better Performance"
  p.optimize_power_consumption = false
 
  p.memory = 1024
  p.cpus = 2
end

Vagrant mit dem Provider Parallels starten:

vagrant up --provider parallels

Schönen Abend. 🙂

Eric Lippmann

Autor: Eric Lippmann

Eric kam während seines ersten Lehrjahres zu NETWAYS und hat seine Ausbildung bereits 2011 sehr erfolgreich abgeschlossen. Seit Beginn arbeitet er in der Softwareentwicklung und dort an den unterschiedlichen NETWAYS Open Source Lösungen, insbesondere inGraph und im Icinga Team an Icinga Web. Darüber hinaus zeichnet er sich für viele Kundenentwicklungen in der Finanz- und Automobilbranche verantwortlich.

Suche nach custom vars in Icinga-web

Dass viel Blut, Schweiß und Tränen in die Entwicklung von Icinga Web 2 gesteckt werden, ist ja kein Geheimnis. Aber auch Icinga-web bekommt hier und da ein bisschen Liebe: Heute wurde die neue Version v1.13.1 von Icinga-web – still und heimlich – freigegeben. Hinzugekommen ist unter anderem die Suche nach custom vars. Standardmäßig ist die Suche deaktiviert, kann aber in der module_cronks.xml im conf.d-Verzeichnis von Icinga-web aktiviert werden:

<?xml version="1.0" encoding="UTF-8"?>
<ae:configurations xmlns="http://agavi.org/agavi/config/parts/module/1.0" xmlns:ae="http://agavi.org/agavi/config/global/envelope/1.0">
    <ae:configuration>
 
        <module enabled="true">
            ....
 
            <setting name="search.service_custom_variables">1</setting>
            <setting name="search.host_custom_variables">1</setting>
 
        </module>
    </ae:configuration>
</ae:configurations>

Viel Spaß!

Eric Lippmann

Autor: Eric Lippmann

Eric kam während seines ersten Lehrjahres zu NETWAYS und hat seine Ausbildung bereits 2011 sehr erfolgreich abgeschlossen. Seit Beginn arbeitet er in der Softwareentwicklung und dort an den unterschiedlichen NETWAYS Open Source Lösungen, insbesondere inGraph und im Icinga Team an Icinga Web. Darüber hinaus zeichnet er sich für viele Kundenentwicklungen in der Finanz- und Automobilbranche verantwortlich.