* [EGIT] Push to GitHub caused corruption
@ 2009-08-10 21:46 John Bito
2009-08-11 6:10 ` Robin Rosenberg
0 siblings, 1 reply; 5+ messages in thread
From: John Bito @ 2009-08-10 21:46 UTC (permalink / raw)
To: git
Using the 'release' build of EGit (0.4.9.200906240051) I pushed a
commit to GitHub. After that, using git to pull, I get 'bad tree
object' resulting in 'remote: aborting due to possible repository
corruption on the remote side'. I had a similar problem back in April
(using integration builds of 0.4.0). I'm willing to investigate if
there's interest in finding the root of the problem.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [EGIT] Push to GitHub caused corruption
2009-08-10 21:46 [EGIT] Push to GitHub caused corruption John Bito
@ 2009-08-11 6:10 ` Robin Rosenberg
2009-08-11 22:52 ` John Bito
0 siblings, 1 reply; 5+ messages in thread
From: Robin Rosenberg @ 2009-08-11 6:10 UTC (permalink / raw)
To: John Bito; +Cc: git
måndag 10 augusti 2009 23:46:34 skrev John Bito <jwbito@gmail.com>:
> Using the 'release' build of EGit (0.4.9.200906240051) I pushed a
> commit to GitHub. After that, using git to pull, I get 'bad tree
> object' resulting in 'remote: aborting due to possible repository
> corruption on the remote side'. I had a similar problem back in April
> (using integration builds of 0.4.0). I'm willing to investigate if
> there's interest in finding the root of the problem.
Fixing problems related to repository integrity is definitely interesting. One
can live all kinds of problem, as long as they don't destroy anything.
-- robin
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [EGIT] Push to GitHub caused corruption
2009-08-11 6:10 ` Robin Rosenberg
@ 2009-08-11 22:52 ` John Bito
2009-08-14 9:19 ` Robin Rosenberg
0 siblings, 1 reply; 5+ messages in thread
From: John Bito @ 2009-08-11 22:52 UTC (permalink / raw)
To: git
Running git fsck -full on the repo that I pushed from is clean.
Here's the git fsck -full from GitHub
<mojombo> git fsck --full
<mojombo> broken link from tree
f4f9ecd1875938baa42467dfd6a8134d75fe5de4 to tree
57548924f1eca854dc8db00844f95d3de2c82957
<mojombo> broken link from tree
f4f9ecd1875938baa42467dfd6a8134d75fe5de4 to tree
3d1f74522c3e7c3c03390fae376446fda6eed306
<mojombo> missing tree 3d1f74522c3e7c3c03390fae376446fda6eed306
<mojombo> missing tree 57548924f1eca854dc8db00844f95d3de2c82957
<mojombo> dangling commit ab6ce47159c1eaff0e4bae19291679267de9f669
The repo on GitHub is back where it was before the push. I have a
copy of the corrupt one from GitHub (358MB tar.gz). If there's
something I can do that would help to improve JGit/EGit, please let me
know.
Thanks,
John
On Mon, Aug 10, 2009 at 23:10, Robin Rosenberg<robin.rosenberg@gmail.com> wrote:
> måndag 10 augusti 2009 23:46:34 skrev John Bito <jwbito@gmail.com>:
>> Using the 'release' build of EGit (0.4.9.200906240051) I pushed a
>> commit to GitHub. After that, using git to pull, I get 'bad tree
>> object' resulting in 'remote: aborting due to possible repository
>> corruption on the remote side'. I had a similar problem back in April
>> (using integration builds of 0.4.0). I'm willing to investigate if
>> there's interest in finding the root of the problem.
>
> Fixing problems related to repository integrity is definitely interesting. One
> can live all kinds of problem, as long as they don't destroy anything.
>
> -- robin
>
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [EGIT] Push to GitHub caused corruption
2009-08-11 22:52 ` John Bito
@ 2009-08-14 9:19 ` Robin Rosenberg
2009-08-14 16:17 ` John Bito
0 siblings, 1 reply; 5+ messages in thread
From: Robin Rosenberg @ 2009-08-14 9:19 UTC (permalink / raw)
To: John Bito; +Cc: git, Shawn O. Pearce
onsdag 12 augusti 2009 00:52:29 skrev John Bito <jwbito@gmail.com>:
> Running git fsck -full on the repo that I pushed from is clean.
> Here's the git fsck -full from GitHub
> <mojombo> git fsck --full
> <mojombo> broken link from tree
> f4f9ecd1875938baa42467dfd6a8134d75fe5de4 to tree
> 57548924f1eca854dc8db00844f95d3de2c82957
> <mojombo> broken link from tree
> f4f9ecd1875938baa42467dfd6a8134d75fe5de4 to tree
> 3d1f74522c3e7c3c03390fae376446fda6eed306
> <mojombo> missing tree 3d1f74522c3e7c3c03390fae376446fda6eed306
> <mojombo> missing tree 57548924f1eca854dc8db00844f95d3de2c82957
> <mojombo> dangling commit ab6ce47159c1eaff0e4bae19291679267de9f669
>
> The repo on GitHub is back where it was before the push. I have a
> copy of the corrupt one from GitHub (358MB tar.gz). If there's
> something I can do that would help to improve JGit/EGit, please let me
> know.
I guess we'd like to try to recreate the problem, unless we see some obvious clue. What
does the tres with missing links look like, i.e. f4f9ecd1875938baa42467dfd6a8134d75fe5de4.
On the recreation side we'd probably need to recreate a repo that looks somewhat like the
github repo before the crash. We can do that by taking a copy of your existing (good) repo,
reset branches and clone it. Then push from yet another copy and hopefully it will blow up
again.
Can we be sure it wasn't corrupt before the jgit push?
Did f4f9ecd1875938baa42467dfd6a8134d75fe5de4 exist before the push or was it new?
-- robin
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [EGIT] Push to GitHub caused corruption
2009-08-14 9:19 ` Robin Rosenberg
@ 2009-08-14 16:17 ` John Bito
0 siblings, 0 replies; 5+ messages in thread
From: John Bito @ 2009-08-14 16:17 UTC (permalink / raw)
To: Robin Rosenberg; +Cc: git, Shawn O. Pearce
The repo that was pushed to cause the corruption GitHup has the tree
entry f4f9ecd1875938baa42467dfd6a8134d75fe5de4 in a dangling commit.
I've opened a bug in hopes that will limit the chatter on this list:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=286653
The information below is all in there, as well.
$ git fsck --full f4f9ecd1875938baa42467dfd6a8134d75fe5de4
dangling commit 560a391801d1712b625d4ae317a490529a4ccf08
$ git ls-tree f4f9ecd1875938baa42467dfd6a8134d75fe5de4
100644 blob 9324c851e6816962f87cb772ebc34f9c8036d832 .classpath
100644 blob 1cb465bc1e95c2e088376ac06b363a3aa481c9ce .project
040000 tree f00fa742e906037190ae0cce70ec235fbf6eab83 .settings
100644 blob 7186ec1ee04722679dd9b8c0567fa522ac0495b3 asql.jardesc
040000 tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904 bin-groovy
040000 tree 57548924f1eca854dc8db00844f95d3de2c82957 bin
040000 tree 1156d24cd387c7278bc536d32b09057556a6c60d lib
040000 tree 3d1f74522c3e7c3c03390fae376446fda6eed306 src
$ git show 560a391801d1712b625d4ae317a490529a4ccf08
commit 560a391801d1712b625d4ae317a490529a4ccf08
Author: John W. Bito <jwbito@XXXX>
Date: Mon Aug 10 14:01:22 2009 -0700
Now traverse rows using DB cursor. Enable statement cache.
diff --git a/ADS/testlib/asql.jar b/ADS/testlib/asql.jar
index bb434c7..155b825 100644
Binary files a/ADS/testlib/asql.jar and b/ADS/testlib/asql.jar differ
diff --git a/ADS/testlib/groovy-all-1.6.1.jar b/ADS/testlib/groovy-all-1.6.1.jar
deleted file mode 100644
index a6252c2..0000000
Binary files a/ADS/testlib/groovy-all-1.6.1.jar and /dev/null differ
diff --git a/ADS/testlib/groovy-all-1.7-beta-1-SNAPSHOT.jar
b/ADS/testlib/groovy-all-1.7-beta-1-SNAPSHOT.jar
new file mode 100644
index 0000000..4d3fec8
Binary files /dev/null and
b/ADS/testlib/groovy-all-1.7-beta-1-SNAPSHOT.jar differ
diff --git a/queryengine/.classpath b/queryengine/.classpath
index 4aab135..9324c85 100644
--- a/queryengine/.classpath
+++ b/queryengine/.classpath
@@ -1,17 +1,17 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry excluding="ch/viveo/query/test/resources/"
kind="src" path="src"/>
- <classpathentry
excluding="bin-groovy/|src/|src/ch/viveo/query/test/resources/"
kind="src" path=""/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
- <classpathentry exported="true" kind="con" path="GROOVY_SUPPORT"/>
- <classpathentry combineaccessrules="false" kind="src" path="/nb_binding"/>
- <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
- <classpathentry kind="con"
path="org.eclipse.datatools.connectivity.jdt.DRIVERLIBRARY/Oracle Thin
Driver"/>
- <classpathentry kind="lib" path="/nb_binding/lib/xpp3_min-1.1.4c.jar"/>
- <classpathentry kind="lib" path="/nb_binding/lib/xstream-1.3.1.jar">
- <attributes>
- <attribute name="javadoc_location"
value="http://xstream.codehaus.org/javadoc"/>
- </attributes>
- </classpathentry>
- <classpathentry kind="output" path="bin"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry excluding="ch/viveo/query/test/resources/"
kind="src" path="src"/>
+ <classpathentry
excluding="bin-groovy/|src/|src/ch/viveo/query/test/resources/"
kind="src" path=""/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry combineaccessrules="false" kind="src" path="/nb_binding"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
+ <classpathentry kind="con"
path="org.eclipse.datatools.connectivity.jdt.DRIVERLIBRARY/Oracle Thin
Driver"/>
+ <classpathentry kind="lib" path="/nb_binding/lib/xpp3_min-1.1.4c.jar"/>
+ <classpathentry kind="lib" path="/nb_binding/lib/xstream-1.3.1.jar">
+ <attributes>
+ <attribute name="javadoc_location"
value="http://xstream.codehaus.org/javadoc"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry exported="true" kind="con" path="GROOVY_SUPPORT"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/queryengine/.settings/org.codehaus.groovy.eclipse.preferences.prefs
b/queryengine/.settings/org.codehaus.groovy.eclipse.preferences.prefs
old mode 100755
new mode 100644
index 1abf79e..c5e9a2e
--- a/queryengine/.settings/org.codehaus.groovy.eclipse.preferences.prefs
+++ b/queryengine/.settings/org.codehaus.groovy.eclipse.preferences.prefs
@@ -1,4 +1,4 @@
-#Tue May 05 14:16:49 PDT 2009
+#Sat Aug 08 14:15:43 PDT 2009
eclipse.preferences.version=1
groovy.compiler.output.path=bin-groovy
support.groovy=true
diff --git a/queryengine/bin-groovy/README b/queryengine/bin-groovy/README
deleted file mode 100644
index 6dd996e..0000000
--- a/queryengine/bin-groovy/README
+++ /dev/null
@@ -1 +0,0 @@
-Folder for Groovy compilation.
diff --git a/queryengine/bin/.settings/org.codehaus.groovy.eclipse.preferences.prefs
b/queryengine/bin/.settings/org.codehaus.groovy.eclipse.preferences.prefs
old mode 100755
new mode 100644
index 1abf79e..c5e9a2e
--- a/queryengine/bin/.settings/org.codehaus.groovy.eclipse.preferences.prefs
+++ b/queryengine/bin/.settings/org.codehaus.groovy.eclipse.preferences.prefs
@@ -1,4 +1,4 @@
-#Tue May 05 14:16:49 PDT 2009
+#Sat Aug 08 14:15:43 PDT 2009
eclipse.preferences.version=1
groovy.compiler.output.path=bin-groovy
support.groovy=true
diff --git a/queryengine/src/ch/viveo/query/TableBinding.groovy
b/queryengine/src/ch/viveo/query/TableBinding.groovy
index 29e0e58..410ebd6 100644
--- a/queryengine/src/ch/viveo/query/TableBinding.groovy
+++ b/queryengine/src/ch/viveo/query/TableBinding.groovy
@@ -7,6 +7,7 @@ import ch.viveo.ads_sql.TableInterface ;
import ch.viveo.ads_sql.buffer.ClientBuffer;
import ch.viveo.ads_sql.exceptions.*;
import groovy.sql.Sql ;
+import groovy.sql.GroovyResultSet ;
import java.util.logging.Logger;
import java.util.logging.Level;
import java.nio.ByteBuffer;
@@ -19,20 +20,20 @@ import java.lang.IllegalStateException
*
*/
public class TableBinding implements TableInterface {
+ private static final Logger log =
Logger.getLogger(getClass().getSimpleName());
+
private final Structure str;
private final Table tab;
private final def db;
private final def allFieldNames;
- private final Set<Object> allColumnNames;
+ private final Set<String> allColumnNames;
private boolean valid;
private boolean open;
private def uri;
- private def rowSet;
+ private GroovyResultSet resultSet;
private def queryParams;
private def queryKey;
private int queryMatchType;
- private boolean rowSetUsed;
- private static final Logger log =
Logger.getLogger(getClass().getSimpleName());
private final String readQuery;
private final String maxUriQuery;
private final String sequenceQuery;
@@ -195,8 +196,7 @@ public class TableBinding implements TableInterface {
void select(int lockOption){
log.log(Level.FINEST, "Parameters: {0}", queryParams)
- rowSet = db.rows(tab.keys.(lockOption ? "queryStringLock" :
"queryString") (queryKey, queryMatchType), queryParams);
- rowSetUsed = false;
+ resultSet = db.rowCursor(tab.keys.(lockOption ? "queryStringLock" :
"queryString") (queryKey, queryMatchType), queryParams);
}
public void selectRange(int keyNumber, int matchOption, ByteBuffer
startValues, ByteBuffer endValues) {
@@ -209,29 +209,23 @@ public class TableBinding implements TableInterface {
}
private reset() {
- rowSet = null;
- rowSetUsed = false
+ if (resultSet && !resultSet.isClosed())
+ resultSet.close();
}
public int retrieveUris(ByteBuffer result, int lockOption) {
- if (null == rowSet) {
+ if (null == resultSet) {
if (!queryKey)
throw new IllegalStateException("No row set available for ${tab.name}");
else {
select(lockOption);
- log.log(Level.FINEST, "Select URIs returns {0}: {1}",
rowSet.size(), rowSet)
}
}
- if (rowSetUsed)
- return 0;
- rowSetUsed = true;
IntBuffer urilist = result.asIntBuffer();
int count = 0;
- rowSet.each {
- if (urilist.position() < urilist.limit()) {
- urilist.put(it.uri as int)
- count ++;
- }
+ while (urilist.position() < urilist.limit() && resultSet.next()) {
+ urilist.put(resultSet.uri as int)
+ count ++;
}
log.log(Level.FINEST, "retrieveUris returning {0} uris", count);
//TODO hold pagination state so next request returns following list elements
@@ -239,6 +233,7 @@ public class TableBinding implements TableInterface {
}
public void close() {
+ reset();
valid = false;
open = false;
//TODO remove the reference to this in the Process instance
diff --git a/queryengine/src/ch/viveo/query/TableBindingTest.groovy
b/queryengine/src/ch/viveo/query/TableBindingTest.groovy
index 8e2a389..aa448d1 100644
--- a/queryengine/src/ch/viveo/query/TableBindingTest.groovy
+++ b/queryengine/src/ch/viveo/query/TableBindingTest.groovy
@@ -8,7 +8,6 @@ import org.junit.Test
import org.junit.Before
import org.junit.After;
-import groovy.sql.Sql;
import java.nio.ByteBuffer;
import java.nio.IntBuffer;
@@ -18,6 +17,9 @@ import ch.viveo.ads_sql.TableInterface
import ch.viveo.ads_sql.buffer.ClientBuffer
import ch.viveo.ads_sql.test.TestData
+import ch.viveo.query.mgr.Process;
+import ch.viveo.query.sql.SqlCursor;
+
/**
* @author John W. Bito
*
@@ -27,13 +29,17 @@ public class TableBindingTest extends GroovyTestCase {
def db = null;
def str, res, fdf, keys;
ByteBuffer buff;
+
+ public static final String TEST_DRIVER = 'oracle.jdbc.driver.OracleDriver';
@Before
public void setUp() throws Exception {
resource = TestData.genericResource("clienp01.info.xml", this);
fdf = new FDFTranslator().readXML(new FileReader(resource));
str = FDFTranslator.createStructure(fdf);
- db = Sql.newInstance("jdbc:oracle:thin:nbquali5/nbquali51@localhost:1521:nb");
+ Class.forName(TEST_DRIVER)
+ System.setProperty(Process.JDBC_DRIVER_PROPERTY, TEST_DRIVER)
+ db = SqlCursor.newInstance("jdbc:oracle:thin:nbquali5/nbquali51@localhost:1521:nb");
def tab = new Table("uri_clienp01");
res = new TableBinding(str, tab, db);
keys = new KeyBinding(tab, str, fdf.key.code);
@@ -65,6 +71,10 @@ public class TableBindingTest extends GroovyTestCase {
def rec = readLast();
String query = "select * from uri_clienp01 where uri=${res.uri}";
def sqlData = db.firstRow(query);
+ sqlData.each { k, v ->
+ println k + "->" + v?.class + "=" + v
+
+ }
assertEquals(sqlData["MAJ0H"], rec["MAJ0H"].value);
assertTrue(res.getUnboundColumns().isEmpty());
assertTrue(res.getUnboundFields().isEmpty());
@@ -121,7 +131,7 @@ public class TableBindingTest extends GroovyTestCase {
res.selectRange(0, TableInterface.MATCHGEKEY1LEKEY2, start, end);
res.select(01);
- assertEquals(12, res.rowSet.size());
+ assertEquals(4, res.queryParams.size());
}
@Test
diff --git a/queryengine/src/ch/viveo/query/mgr/Process.groovy
b/queryengine/src/ch/viveo/query/mgr/Process.groovy
index 9613e2a..5bce4ed 100644
--- a/queryengine/src/ch/viveo/query/mgr/Process.groovy
+++ b/queryengine/src/ch/viveo/query/mgr/Process.groovy
@@ -4,13 +4,13 @@
package ch.viveo.query.mgr ;
import java.nio.ByteBuffer ;
-import groovy.sql.Sql;
import java.sql.Connection;
import ch.viveo.ads_sql.FDFTranslator;
import ch.viveo.ads_sql.TableInterface;
import ch.viveo.query.*;
+import ch.viveo.query.sql.SqlCursor;
/**
* Handle the lifecycle of PDs (Process Definition) and the resources
that map to SQL queries
@@ -28,6 +28,7 @@ public class Process{
def dbConnection = null;
public static final String CONNECTION_PROPERTY = "ch.viveo.db.connect";
+ public static final String JDBC_DRIVER_PROPERTY = "ch.viveo.db.driver";
FDFTranslator loader = null;
@@ -49,10 +50,13 @@ public class Process{
private def getConnection() {
if (!dbConnection) {
String connSpec = System.getProperty(CONNECTION_PROPERTY);
+ String driverName = System.getProperty(JDBC_DRIVER_PROPERTY);
if (!connSpec)
throw new IllegalArgumentException("$CONNECTION_PROPERTY not set");
- Class.forName("oracle.jdbc.driver.OracleDriver"); // TODO setup a
proper initialization
- dbConnection = Sql.newInstance(connSpec);
+ if (driverName)
+ dbConnection = SqlCursor.newInstance(connSpec, driverName);
+ else
+ dbConnection = SqlCursor.newInstance(connSpec);
}
return dbConnection;
}
diff --git a/queryengine/src/ch/viveo/query/sql/SqlCursor.java
b/queryengine/src/ch/viveo/query/sql/SqlCursor.java
new file mode 100644
index 0000000..232ccd3
--- /dev/null
+++ b/queryengine/src/ch/viveo/query/sql/SqlCursor.java
@@ -0,0 +1,149 @@
+/**
+ *
+ */
+package ch.viveo.query.sql;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+import java.util.Properties;
+
+import javax.sql.DataSource;
+
+import groovy.sql.GroovyResultSet;
+import groovy.sql.GroovyResultSetProxy;
+import groovy.sql.Sql;
+
+/**
+ * @author IBM User
+ *
+ */
+public class SqlCursor extends Sql {
+
+ /**
+ * @param dataSource
+ */
+ public SqlCursor(DataSource dataSource) {
+ super(dataSource);
+ setCacheStatements(true);
+ }
+
+ /**
+ * @param connection
+ */
+ public SqlCursor(Connection connection) {
+ super(connection);
+ setCacheStatements(true);
+ }
+
+ /**
+ * Creates a new Sql instance given a JDBC connection URL.
+ *
+ * @param url a database url of the form
+ * <code> jdbc:<em>subprotocol</em>:<em>subname</em></code>
+ * @return a new Sql instance with a connection
+ * @throws SQLException if a database access error occurs
+ */
+ public static SqlCursor newInstance(String url) throws SQLException {
+ Connection connection = DriverManager.getConnection(url);
+ return new SqlCursor(connection);
+ }
+
+ /**
+ * Creates a new Sql instance given a JDBC connection URL
+ * and some properties.
+ *
+ * @param url a database url of the form
+ * <code>
jdbc:<em>subprotocol</em>:<em>subname</em></code>
+ * @param properties a list of arbitrary string tag/value pairs
+ * as connection arguments; normally at least a
"user" and
+ * "password" property should be included
+ * @return a new Sql instance with a connection
+ * @throws SQLException if a database access error occurs
+ */
+ public static SqlCursor newInstance(String url, Properties
properties) throws SQLException {
+ Connection connection = DriverManager.getConnection(url, properties);
+ return new SqlCursor(connection);
+ }
+
+ /**
+ * Creates a new Sql instance given a JDBC connection URL,
+ * some properties and a driver class name.
+ *
+ * @param url a database url of the form
+ * <code>
jdbc:<em>subprotocol</em>:<em>subname</em></code>
+ * @param properties a list of arbitrary string tag/value pairs
+ * as connection arguments; normally at
least a "user" and
+ * "password" property should be included
+ * @param driverClassName the fully qualified class name of the
driver class
+ * @return a new Sql instance with a connection
+ * @throws SQLException if a database access error occurs
+ * @throws ClassNotFoundException if the class cannot be found or loaded
+ */
+ public static SqlCursor newInstance(String url, Properties
properties, String driverClassName)
+ throws SQLException, ClassNotFoundException {
+ loadDriver(driverClassName);
+ return newInstance(url, properties);
+ }
+
+ /**
+ * Creates a new Sql instance given a JDBC connection URL,
+ * a username and a password.
+ *
+ * @param url a database url of the form
+ * <code> jdbc:<em>subprotocol</em>:<em>subname</em></code>
+ * @param user the database user on whose behalf the connection
+ * is being made
+ * @param password the user's password
+ * @return a new Sql instance with a connection
+ * @throws SQLException if a database access error occurs
+ */
+ public static SqlCursor newInstance(String url, String user,
String password) throws SQLException {
+ Connection connection = DriverManager.getConnection(url,
user, password);
+ return new SqlCursor(connection);
+ }
+
+ /**
+ * Creates a new Sql instance given a JDBC connection URL,
+ * a username, a password and a driver class name.
+ *
+ * @param url a database url of the form
+ * <code>
jdbc:<em>subprotocol</em>:<em>subname</em></code>
+ * @param user the database user on whose behalf the connection
+ * is being made
+ * @param password the user's password
+ * @param driverClassName the fully qualified class name of the
driver class
+ * @return a new Sql instance with a connection
+ * @throws SQLException if a database access error occurs
+ * @throws ClassNotFoundException if the class cannot be found or loaded
+ */
+ public static SqlCursor newInstance(String url, String user,
String password, String driverClassName) throws SQLException,
+ ClassNotFoundException {
+ loadDriver(driverClassName);
+ return newInstance(url, user, password);
+ }
+
+ /**
+ * Creates a new Sql instance given a JDBC connection URL
+ * and a driver class name.
+ *
+ * @param url a database url of the form
+ * <code>
jdbc:<em>subprotocol</em>:<em>subname</em></code>
+ * @param driverClassName the fully qualified class name of the
driver class
+ * @return a new Sql instance with a connection
+ * @throws SQLException if a database access error occurs
+ * @throws ClassNotFoundException if the class cannot be found or loaded
+ */
+ public static SqlCursor newInstance(String url, String
driverClassName) throws SQLException, ClassNotFoundException {
+ loadDriver(driverClassName);
+ return newInstance(url);
+ }
+
+ public GroovyResultSet rowCursor(String sql, List<Object> params)
throws SQLException {
+ ResultSet rs = executePreparedQuery(sql, params);
+ return new GroovyResultSetProxy(rs).getImpl();
+ }
+
+}
diff --git a/queryengine/src/nb.sql b/queryengine/src/nb.sql
index 277ff44..7c2c875 100644
--- a/queryengine/src/nb.sql
+++ b/queryengine/src/nb.sql
@@ -100,4 +100,8 @@ delete from clienp01 where uri > 1500;
desc uri_clienp01;
select distinct nom0x from clienp01
-select uri from clienp01 where nom0x = 'CL99898000'
\ No newline at end of file
+select uri from clienp01 where nom0x = 'CL99898000'
+
+alter table uri_clienp01 add (time timestamp)
+alter table uri_clienp01 drop column time
+update uri_clienp01 set time = current_timestamp
\ No newline at end of file
On Fri, Aug 14, 2009 at 02:19, Robin
Rosenberg<robin.rosenberg.lists@dewire.com> wrote:
> f4f9ecd1875938baa42467dfd6a8134d75fe5de4
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2009-08-14 16:17 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-08-10 21:46 [EGIT] Push to GitHub caused corruption John Bito
2009-08-11 6:10 ` Robin Rosenberg
2009-08-11 22:52 ` John Bito
2009-08-14 9:19 ` Robin Rosenberg
2009-08-14 16:17 ` John Bito
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).