Mentions légales du service

Skip to content
Snippets Groups Projects
Commit 061842cb authored by Jérôme Euzenat's avatar Jérôme Euzenat
Browse files

- added storage for EDOAL Aggregate (affects Apply)

- moved to VERSION 4.8
parent 95436188
No related branches found
No related tags found
No related merge requests found
......@@ -80,6 +80,7 @@ import fr.inrialpes.exmo.align.impl.edoal.Transformation;
import fr.inrialpes.exmo.align.impl.edoal.ValueExpression;
import fr.inrialpes.exmo.align.impl.edoal.Value;
import fr.inrialpes.exmo.align.impl.edoal.Apply;
import fr.inrialpes.exmo.align.impl.edoal.Aggregate;
import fr.inrialpes.exmo.align.impl.edoal.Datatype;
import fr.inrialpes.exmo.align.impl.edoal.EDOALCell;
import fr.inrialpes.exmo.align.impl.edoal.EDOALVisitor;
......@@ -155,6 +156,7 @@ public class EDOALSQLCache {
public static final int PROPERTY = 6;
public static final int CLASS = 7;
public static final int REST = 8;
public static final int AGGREGATE = 4;
public EDOALSQLCache( DBService serv ) {
service = serv;
......@@ -790,7 +792,8 @@ public class EDOALSQLCache {
if ( type == INSTANCE ) return extractInstanceExpression( rs.getLong( "joinid" ) );
else if ( type == VALUE ) return extractValue( rs.getLong( "joinid" ) );
else if ( type == PATH ) return extractPathExpression( rs.getLong( "joinid" ) );
else if ( type == APPLY ) return extractApply( rs.getLong( "joinid" ) );
else if ( type == APPLY ) return extractApply( rs.getLong( "joinid" ), 0 );
else if ( type == AGGREGATE ) return extractApply( rs.getLong( "joinid" ), 1 );
else throw new AlignmentException( "Unknown ValueExpression type "+type );
} else {
throw new AlignmentException( "Cannot retrieve value expression "+intid );
......@@ -813,6 +816,9 @@ public class EDOALSQLCache {
} else if ( e instanceof Apply ) {
idres = visit( (Apply)e );
type = APPLY;
} else if ( e instanceof Aggregate ) {
idres = visit( (Aggregate)e );
type = AGGREGATE;
} else throw new AlignmentException( "Unknown ValueExpression "+e );
return registerExpression( "valueexpr", type, idres );
}
......@@ -887,7 +893,7 @@ public class EDOALSQLCache {
}
// (play with NULL)
public Apply extractApply( long intid ) throws SQLException, AlignmentException {
public ValueExpression extractApply( long intid, int type ) throws SQLException, AlignmentException {
try ( Statement st = service.getConnection().createStatement() ) {
ResultSet rs = st.executeQuery( "SELECT operation FROM apply WHERE intid='"+intid+"'" );
if ( rs.next() ) {
......@@ -899,7 +905,11 @@ public class EDOALSQLCache {
while ( rs2.next() ) {
args.add( extractValueExpression( rs2.getLong( "id" ) ) );
}
return new Apply( opuri, args );
if ( type == 0 ) {
return new Apply( opuri, args );
} else {
return new Aggregate( opuri, args );
}
}
} catch ( URISyntaxException urisex ) {
throw new AlignmentException( "Invalid operation URI", urisex );
......@@ -912,7 +922,26 @@ public class EDOALSQLCache {
// Get the constructor
final URI op = e.getOperation();
// Create the relexpr
try ( PreparedStatement st2 = createInsertStatement( "INSERT INTO apply (operation) VALUES (?)" ) ) {
try ( PreparedStatement st2 = createInsertStatement( "INSERT INTO apply (type,operation) VALUES (0,?)" ) ) {
st2.setString( 1, op.toString() );
long exprres = executeUpdateWithId( st2, "apply" );
// Iterate on arguments
try ( Statement st = service.getConnection().createStatement() ) {
for ( final ValueExpression ve : e.getArguments() ) {
long pres = visit( ve );
st.executeUpdate( "INSERT INTO arglist (intid,id) VALUES ('"+exprres+"','"+pres+"')" );
}
}
// Return the expr
return exprres;
}
}
public long visit( final Aggregate e ) throws SQLException, AlignmentException {
// Get the constructor
final URI op = e.getOperation();
// Create the relexpr
try ( PreparedStatement st2 = createInsertStatement( "INSERT INTO apply (type,operation) VALUES (1,?)" ) ) {
st2.setString( 1, op.toString() );
long exprres = executeUpdateWithId( st2, "apply" );
// Iterate on arguments
......
......@@ -76,7 +76,7 @@ public class SQLCache extends VolatilCache implements Cache {
String port = null;
int rights = 1; // writing rights in the database (default is 1)
final int VERSION = 472; // Version of the API to be stored in the database
final int VERSION = 480; // Version of the API to be stored in the database
/* 300: initial database format
301: ADDED alignment id as primary key
302: ALTERd cached/stored/ouri tag forms
......@@ -99,8 +99,8 @@ public class SQLCache extends VolatilCache implements Cache {
// URIINdex:
ADDED multiple uris for alignments (?)
CHANGED the alext namespace
471: ADDED management of EDOAL alignments
472: ADDED reltype and conftype to Alignment table
480: ADDED management of EDOAL alignments
ADDED reltype and conftype to Alignment table
*/
DBService service = null;
......@@ -970,6 +970,7 @@ public class SQLCache extends VolatilCache implements Cache {
CREATE TABLE apply (
intid BIGINT NOT NULL AUTO_INCREMENT,
type INT,
operation VARCHAR(255),
PRIMARY KEY (intid))
......@@ -1142,7 +1143,7 @@ public class SQLCache extends VolatilCache implements Cache {
st.executeUpdate("CREATE TABLE instexpr (intid "+SERIAL+", uri VARCHAR(250), var VARCHAR(250), PRIMARY KEY (intid))");
st.executeUpdate("CREATE TABLE literal (intid "+SERIAL+", type BIGINT, value VARCHAR(500), PRIMARY KEY (intid))");
st.executeUpdate("CREATE TABLE typeexpr (intid "+SERIAL+", uri VARCHAR(250), PRIMARY KEY (intid))");
st.executeUpdate("CREATE TABLE apply (intid "+SERIAL+", operation VARCHAR(255), PRIMARY KEY (intid))");
st.executeUpdate("CREATE TABLE apply (intid "+SERIAL+", type INT, operation VARCHAR(255), PRIMARY KEY (intid))");
st.executeUpdate("CREATE TABLE arglist (intid BIGINT NOT NULL, id BIGINT NOT NULL)");
st.executeUpdate("CREATE TABLE classexpr (intid "+SERIAL+", type INT, joinid BIGINT, var VARCHAR(250), PRIMARY KEY (intid))");
st.executeUpdate("CREATE TABLE classid (intid "+SERIAL+", uri VARCHAR(250), PRIMARY KEY (intid))");
......@@ -1446,13 +1447,10 @@ public class SQLCache extends VolatilCache implements Cache {
st2.executeUpdate("UPDATE extension SET uri='"+Namespace.ALIGNMENT.uri+"#' WHERE uri='"+Namespace.ALIGNMENT.uri+"'");
st2.executeUpdate("UPDATE extension SET uri='"+Namespace.EXT.uri+"' WHERE uri='"+Namespace.ALIGNMENT.uri+"#' AND (tag='time' OR tag='method' OR tag='pretty')");
}
if ( version < 471 ) {
logger.info("Upgrading to version 4.71");
if ( version < 480 ) {
logger.info("Upgrading to version 4.8");
logger.info("Creating EDOAL tables");
initEDOALTables( createStatement() );
}
if ( version < 472 ) {
logger.info("Upgrading to version 4.72");
logger.info("Adding reltype attribute");
st.executeUpdate("ALTER TABLE alignment ADD reltype VARCHAR(255);");
st.executeUpdate("ALTER TABLE alignment ADD conftype VARCHAR(255);");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment