METAMODEL-30: Fixed
authorkaspers <kaspers@kaspers-think.humaninference.com>
Mon, 25 Nov 2013 14:58:44 +0000 (15:58 +0100)
committerkaspers <kaspers@kaspers-think.humaninference.com>
Mon, 25 Nov 2013 14:58:44 +0000 (15:58 +0100)
CHANGES.txt
csv/src/main/java/org/apache/metamodel/csv/CsvDataContext.java

index d46a510..78cb3ef 100644 (file)
@@ -11,4 +11,5 @@
  * Setting up the project on apache infrastructure
  * [METAMODEL-10] - Exclude Jackcess dependency (Access module) from MetaModel
  * Renaming the package hierarchy from org.eobjects.metamodel to org.apache.metamodel
- * [METAMODEL-29] - Fixed issue in CreateTable builder class, causing it to only support a single column definition
\ No newline at end of file
+ * [METAMODEL-29] - Fixed issue in CreateTable builder class, causing it to only support a single column definition
+ * [METAMODEL-30] - Fixed issue with count(*) queries on CSV resources that does not provide a byte stream length 
\ No newline at end of file
index c34c52b..9d56b1b 100644 (file)
@@ -270,15 +270,23 @@ public final class CsvDataContext extends QueryPostprocessDataContext implements
         if (!functionApproximationAllowed) {
             return null;
         }
+        
+        if (whereItems != null && !whereItems.isEmpty()) {
+            return null;
+        }
+        
+        final long length = _resource.getSize();
+        if (length < 0) {
+            // METAMODEL-30: Sometimes the size of the resource is not known
+            return null;
+        }
 
         return _resource.read(new Func<InputStream, Number>() {
             @Override
             public Number eval(InputStream inputStream) {
                 try {
-                    final long length = _resource.getSize();
                     // read up to 5 megs of the file and approximate number of
-                    // lines
-                    // based on that.
+                    // lines based on that.
 
                     final int sampleSize = (int) Math.min(length, 1024 * 1024 * 5);
                     final int chunkSize = Math.min(sampleSize, 1024 * 1024);