use of org.eclipse.persistence.platform.database.MySQLPlatform in project eclipselink by eclipse-ee4j.
the class SimpleSPTestSuite method noargsTest.
@Test
public void noargsTest() {
Invocation invocation = new Invocation("NoArgsTest");
Operation op = xrService.getOperation(invocation.getName());
Object result = op.invoke(xrService, invocation);
assertNotNull("result is null", result);
Document doc = xmlPlatform.createDocument();
XMLMarshaller marshaller = xrService.getXMLContext().createMarshaller();
marshaller.marshal(result, doc);
Document controlDoc = xmlParser.parse(new StringReader(xrService.getORSession().getProject().getDatasourceLogin().getPlatform() instanceof MySQLPlatform ? VALUE_0_XML : VALUE_1_XML));
assertTrue("control document not same as instance document", comparer.isNodeEqual(controlDoc, doc));
}
use of org.eclipse.persistence.platform.database.MySQLPlatform in project eclipselink by eclipse-ee4j.
the class SimpleSPTestSuite method varcharTest.
@Test
public void varcharTest() {
Invocation invocation = new Invocation("VarcharTest");
invocation.setParameter("X", "this is a test");
Operation op = xrService.getOperation(invocation.getName());
Object result = op.invoke(xrService, invocation);
assertNotNull("result is null", result);
Document doc = xmlPlatform.createDocument();
XMLMarshaller marshaller = xrService.getXMLContext().createMarshaller();
marshaller.marshal(result, doc);
Document controlDoc = xmlParser.parse(new StringReader(xrService.getORSession().getProject().getDatasourceLogin().getPlatform() instanceof MySQLPlatform ? VALUE_0_XML : VALUE_1_XML));
assertTrue("control document not same as instance document", comparer.isNodeEqual(controlDoc, doc));
}
use of org.eclipse.persistence.platform.database.MySQLPlatform in project eclipselink by eclipse-ee4j.
the class JDBCHelper method loadProcedures.
protected List<ProcedureType> loadProcedures(String originalCatalogPattern, String originalSchemaPattern, String originalProcedurePattern) {
List<ProcedureType> dbStoredProcedures = null;
boolean catalogMatchDontCare = false;
DatabasePlatform platform = dbwsBuilder.getDatabasePlatform();
if (platform instanceof MySQLPlatform || platform instanceof DerbyPlatform || platform instanceof PostgreSQLPlatform) {
// note that get info on other platforms that also require catalogMatchDontCare = true
catalogMatchDontCare = true;
}
String catalogPattern = escapePunctuation(originalCatalogPattern);
String schemaPattern = escapePunctuation(originalSchemaPattern);
String procedurePattern = escapePunctuation(originalProcedurePattern);
// Make sure procedure(s) is/are available
ResultSet procsInfo = null;
try {
DatabaseMetaData databaseMetaData = getDatabaseMetaData(dbwsBuilder.getConnection());
procsInfo = databaseMetaData.getProcedures(catalogPattern, schemaPattern, procedurePattern);
// did we get a hit?
if (procsInfo != null) {
List<ProcedureType> tmpProcs = new ArrayList<ProcedureType>();
while (procsInfo.next()) {
String actualCatalogName = procsInfo.getString(PROCS_INFO_CATALOG);
String actualSchemaName = procsInfo.getString(PROCS_INFO_SCHEMA);
String actualProcedureName = procsInfo.getString(PROCS_INFO_NAME);
short procedureType = procsInfo.getShort(PROCS_INFO_TYPE);
ProcedureType dbStoredProcedure;
if (procedureType == procedureReturnsResult) {
dbStoredProcedure = new FunctionType(actualProcedureName);
} else {
dbStoredProcedure = new ProcedureType(actualProcedureName);
}
if (actualCatalogName != null && actualCatalogName.length() > 0) {
dbStoredProcedure.setCatalogName(actualCatalogName);
}
if (actualSchemaName != null && actualSchemaName.length() > 0) {
dbStoredProcedure.setSchema(actualSchemaName);
}
tmpProcs.add(dbStoredProcedure);
}
procsInfo.close();
/* new a temp bucket to hold DbStoredArgs until they can be sorted out with respect
* to which DbStoredProcedure owns which args; this has to be done because Oracle can
* return multiple hits across multiple packages for the same procedureName.
*/
int numProcs = tmpProcs.size();
if (numProcs > 0) {
dbStoredProcedures = new ArrayList<ProcedureType>(numProcs);
ResultSet procedureColumnsInfo = null;
procedureColumnsInfo = databaseMetaData.getProcedureColumns(catalogPattern, schemaPattern, procedurePattern, "%");
while (procedureColumnsInfo.next()) {
String actualCatalogName = procedureColumnsInfo.getString(PROC_COLS_INFO_CATALOG);
String actualSchemaName = procedureColumnsInfo.getString(PROC_COLS_INFO_SCHEMA);
String actualProcedureName = procedureColumnsInfo.getString(PROC_COLS_INFO_NAME);
String argName = procedureColumnsInfo.getString(PROC_COLS_INFO_COLNAME);
// some MySql drivers return empty string, some return null: set to emptyString regardless
if (argName == null) {
argName = "";
}
ArgumentType dbStoredArgument = new ArgumentType(argName);
short inOut = procedureColumnsInfo.getShort(PROC_COLS_INFO_TYPE);
if (inOut == procedureColumnInOut) {
dbStoredArgument.setDirection(INOUT);
} else if (inOut == procedureColumnOut) {
dbStoredArgument.setDirection(OUT);
} else if (inOut == procedureColumnReturn) {
dbStoredArgument.setDirection(RETURN);
} else {
// default to ArgumentTypeDirection.IN
dbStoredArgument.setDirection(IN);
}
int jdbcType = procedureColumnsInfo.getInt(PROC_COLS_INFO_DATA_TYPE);
int precision = procedureColumnsInfo.getInt(PROC_COLS_INFO_PRECISION);
int scale = procedureColumnsInfo.getInt(PROC_COLS_INFO_SCALE);
dbStoredArgument.setEnclosedType(buildTypeForJDBCType(jdbcType, precision, scale));
// find matching DbStoredProcedure
// this dbStoredArgument belongs to a 'regular' procedure
ProcedureType matchingProc = null;
for (int i = 0; i < tmpProcs.size(); ) {
ProcedureType tmpProc = tmpProcs.get(i);
if (matches(tmpProc, actualCatalogName, actualSchemaName, actualProcedureName, false, catalogMatchDontCare)) {
matchingProc = tmpProc;
dbStoredProcedures.add(matchingProc);
break;
}
i++;
}
if (matchingProc == null) {
// look in dbStoredProcedures - matching proc already moved over ?
for (ProcedureType dbStoredProcedure : dbStoredProcedures) {
if (matches(dbStoredProcedure, actualCatalogName, actualSchemaName, actualProcedureName, false, catalogMatchDontCare)) {
matchingProc = dbStoredProcedure;
break;
}
}
}
if (matchingProc != null) {
if (matchingProc.isFunctionType() && dbStoredArgument.getArgumentName().equalsIgnoreCase("")) {
((FunctionType) matchingProc).setReturnArgument(dbStoredArgument);
} else {
matchingProc.getArguments().add(dbStoredArgument);
}
tmpProcs.remove(matchingProc);
}
// else some argument that doesn't have a matching proc? ignore for now
}
procedureColumnsInfo.close();
if (!tmpProcs.isEmpty()) {
// leftovers are the no-arg procedures
dbStoredProcedures.addAll(tmpProcs);
}
}
}
} catch (SQLException sqlException) {
throw new IllegalStateException("failure retrieving Stored Procedure metadata", sqlException);
}
if (dbStoredProcedures != null && !dbStoredProcedures.isEmpty()) {
Collections.sort(dbStoredProcedures, new Comparator<ProcedureType>() {
@Override
public int compare(ProcedureType o1, ProcedureType o2) {
String name1 = o1.getProcedureName();
String name2 = o2.getProcedureName();
if (!name1.equals(name2)) {
return name1.compareTo(name2);
} else {
return o1.getOverload() - o2.getOverload();
}
}
});
}
return dbStoredProcedures;
}
use of org.eclipse.persistence.platform.database.MySQLPlatform in project eclipselink by eclipse-ee4j.
the class TestPropertiesUtils method testSetInToDatabasePlatform.
@Test
public void testSetInToDatabasePlatform() {
MySQLPlatform db = new MySQLPlatform();
Assert.assertFalse(db.shouldForceFieldNamesToUpperCase());
Assert.assertTrue(db.shouldBindLiterals());
PropertiesUtils.set(db, "eclipselink.target-database", "ShouldForceFieldNamesToUpperCase=true, shouldbindliterals = false");
Assert.assertTrue(db.shouldForceFieldNamesToUpperCase());
Assert.assertFalse(db.shouldBindLiterals());
}
use of org.eclipse.persistence.platform.database.MySQLPlatform in project eclipselink by eclipse-ee4j.
the class TestPropertiesUtils method testInvalidPropertyType.
@Test
public void testInvalidPropertyType() {
// StringBindingSize is a property, but it is a number
String config = "StringBindingSize=one";
MySQLPlatform db = new MySQLPlatform();
try {
PropertiesUtils.set(db, "eclipselink.target-database", config);
Assert.fail();
} catch (ConversionException ce) {
// expected
}
}
Aggregations