/*
* Copyright (c) 2004-2013 Tada AB and other contributors, as listed below.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the The BSD 3-Clause License
* which accompanies this distribution, and is available at
* http://opensource.org/licenses/BSD-3-Clause
*
* Contributors:
* Tada AB
* Purdue University
*/
package org.postgresql.pljava.sqlgen;
import org.postgresql.pljava.annotation.Trigger;
import static org.postgresql.pljava.annotation.Trigger.Event.DELETE;
import static org.postgresql.pljava.annotation.Trigger.Event.INSERT;
import static org.postgresql.pljava.annotation.Trigger.Event.TRUNCATE;
/**
* @author Thomas Hallgren - pre-Java6 version
* @author Chapman Flack (Purdue Mathematics) - update to Java6
*/
class TriggerNamer
{
static String synthesizeName( Trigger t)
{
StringBuilder bld = new StringBuilder();
bld.append("trg_");
switch ( t.called() )
{
case BEFORE: bld.append( 'b'); break;
case AFTER: bld.append( 'a'); break;
case INSTEAD_OF: bld.append( 'i'); break;
}
bld.append((t.scope() == Trigger.Scope.ROW) ? 'r' : 's');
// Fixed order regardless of order in list.
//
boolean atDelete = false;
boolean atInsert = false;
boolean atUpdate = false;
boolean atTruncate = false;
for( Trigger.Event e : t.events() )
{
switch( e )
{
case DELETE:
atDelete = true;
break;
case INSERT:
atInsert = true;
break;
case TRUNCATE:
atTruncate = true;
break;
default:
atUpdate = true;
}
}
bld.append('_');
if(atDelete)
bld.append('d');
if(atInsert)
bld.append('i');
if(atUpdate)
bld.append('u');
if(atTruncate)
bld.append('t');
return bld.toString();
}
}