<%@ jet package="compiledtemplates" 
imports="java.util.* util.DatabaseGenerationHelper org.eclipse.emf.ecore.* org.eclipse.emf.codegen.util.*"
class="DDL" %>
<%
%>
<%EPackage ePackage = (EPackage) argument;

DatabaseGenerationHelper h = new DatabaseGenerationHelper();
%>
<%for (EClass eClass : h.getClassesInCreateOrder(ePackage)) {
boolean hasSuperClass = !h.getExtends(eClass).isEmpty();
boolean hasOneReferences = !h.getAllOneReferences(eClass).isEmpty();
%>

CREATE TABLE <%=h.getDatabaseName(eClass) %> (
<%if (h.getNaturalKeys(eClass).isEmpty()) {%>
UUIDSTRING VARCHAR(255) NOT NULL,
<%}%>
<%for (Iterator<EAttribute> iter = h.getAttributes(eClass).iterator(); iter.hasNext();) {
EAttribute attribute = iter.next();
%>
<%=h.getDatabaseName(attribute)%> <%=h.getDatabaseType(attribute)%><%
// skip , on last line
if (iter.hasNext() || hasOneReferences || hasSuperClass) {%>,<%}%>
<%}%>

<%for (Iterator<EReference> iter = h.getAllOneReferences(eClass).iterator(); iter.hasNext();) {
EReference ref = iter.next();
%>
<%if ("list".equals(h.getCollectionType(ref))) {%>
<index column="<%=h.getDatabaseName(ref)%>_INDEX" />
<%}%>
<%=h.getForeignKeyName(ref)%> <%=h.getForeignKeyType(ref)%>,
<%=h.getForeignKeyConstraint(ref)%><%
// skip , on last line
if (iter.hasNext() || hasSuperClass) {%>,<%}%>
<%}%>

<%if (hasSuperClass) {
EClass superClass = h.getExtends(eClass).get(0);
%>
<%=h.getForeignKeyName(superClass)%> <%=h.getForeignKeyType(superClass)%>,
<%=h.getForeignKeyConstraint(superClass)%>
<%}%>
);

<%}%>

<%for (EClass eClass : h.resolveManyToManyRelations(ePackage)) {%>
CREATE TABLE <%=h.getDatabaseName(eClass) %> (
<%for (Iterator<EReference> iter = h.getAllOneReferences(eClass).iterator(); iter.hasNext();) {
EReference ref = iter.next();
%>
<%=h.getForeignKeyName(ref)%> <%=h.getForeignKeyType(ref)%>,
<%=h.getForeignKeyConstraint(ref)%><%
// skip , on last line
if (iter.hasNext()) {%>,<%}%>
<%}%>
);

<%}%>