Browse Source

support float and double for #592

Maurits van der Schee 5 years ago
parent
commit
104b404f9f

+ 2
- 2
src/Tqdev/PhpCrudApi/Database/DataConverter.php View File

26
             case 'float':
26
             case 'float':
27
                 return (float) $value;
27
                 return (float) $value;
28
             case 'decimal':
28
             case 'decimal':
29
-                return sprintf('%.' . $args[0] . 'f', $value);
29
+                return number_format($value, $args[0], '.', '');
30
         }
30
         }
31
         return $value;
31
         return $value;
32
     }
32
     }
39
         if (in_array($this->driver, ['sqlsrv', 'sqlite']) && in_array($column->getType(), ['integer', 'bigint'])) {
39
         if (in_array($this->driver, ['sqlsrv', 'sqlite']) && in_array($column->getType(), ['integer', 'bigint'])) {
40
             return 'integer';
40
             return 'integer';
41
         }
41
         }
42
-        if (in_array($this->driver, ['sqlite']) && in_array($column->getType(), ['float', 'double'])) {
42
+        if (in_array($this->driver, ['sqlite', 'pgsql']) && in_array($column->getType(), ['float', 'double'])) {
43
             return 'float';
43
             return 'float';
44
         }
44
         }
45
         if (in_array($this->driver, ['sqlite']) && in_array($column->getType(), ['decimal'])) {
45
         if (in_array($this->driver, ['sqlite']) && in_array($column->getType(), ['decimal'])) {

+ 2
- 2
src/Tqdev/PhpCrudApi/Database/GenericDefinition.php View File

72
                 return $column->getPk() ? ' AUTO_INCREMENT' : '';
72
                 return $column->getPk() ? ' AUTO_INCREMENT' : '';
73
             case 'pgsql':
73
             case 'pgsql':
74
             case 'sqlsrv':
74
             case 'sqlsrv':
75
-                return '';
75
+                return $column->getPk() ? ' IDENTITY(1,1)' : '';
76
             case 'sqlite':
76
             case 'sqlite':
77
                 return $column->getPk() ? ' AUTOINCREMENT' : '';
77
                 return $column->getPk() ? ' AUTOINCREMENT' : '';
78
         }
78
         }
440
     private function query(string $sql, array $arguments): bool
440
     private function query(string $sql, array $arguments): bool
441
     {
441
     {
442
         $stmt = $this->pdo->prepare($sql);
442
         $stmt = $this->pdo->prepare($sql);
443
-        //echo "- $sql -- " . json_encode($arguments) . "\n";
443
+        // echo "- $sql -- " . json_encode($arguments) . "\n";
444
         return $stmt->execute($arguments);
444
         return $stmt->execute($arguments);
445
     }
445
     }
446
 }
446
 }

+ 3
- 2
src/Tqdev/PhpCrudApi/Database/TypeConverter.php View File

23
             'blob' => 'bytea',
23
             'blob' => 'bytea',
24
             'float' => 'real',
24
             'float' => 'real',
25
             'double' => 'double precision',
25
             'double' => 'double precision',
26
-            'varbinary(*)' => 'bytea',
26
+            'varbinary' => 'bytea',
27
         ],
27
         ],
28
         'sqlsrv' => [
28
         'sqlsrv' => [
29
             'boolean' => 'bit',
29
             'boolean' => 'bit',
30
             'varchar' => 'nvarchar',
30
             'varchar' => 'nvarchar',
31
             'clob' => 'ntext',
31
             'clob' => 'ntext',
32
             'blob' => 'image',
32
             'blob' => 'image',
33
-            'timestamp' => 'datetime2',
33
+            'time' => 'time(0)',
34
+            'timestamp' => 'datetime2(0)',
34
             'double' => 'float',
35
             'double' => 'float',
35
             'float' => 'real',
36
             'float' => 'real',
36
         ],
37
         ],

+ 5
- 8
tests/functional/003_columns/014_create_types_table.log View File

1
-skip-for-pgsql: varbinary is not properly supported yet
2
-skip-for-sqlsrv: float has high precision and time and datetime have microseconds
3
 ===
1
 ===
4
 POST /columns
2
 POST /columns
5
 
3
 
17
 {"name":"timestamp","type":"timestamp"},
15
 {"name":"timestamp","type":"timestamp"},
18
 {"name":"clob","type":"clob"},
16
 {"name":"clob","type":"clob"},
19
 {"name":"blob","type":"blob"},
17
 {"name":"blob","type":"blob"},
20
-{"name":"varbinary","type":"varbinary","length":10},
21
 {"name":"geometry","type":"geometry"}
18
 {"name":"geometry","type":"geometry"}
22
 ]}
19
 ]}
23
 ===
20
 ===
31
 ===
28
 ===
32
 200
29
 200
33
 Content-Type: application/json
30
 Content-Type: application/json
34
-Content-Length: 615
31
+Content-Length: 563
35
 
32
 
36
-{"name":"types","type":"table","columns":[{"name":"id","type":"integer","pk":true},{"name":"integer","type":"integer"},{"name":"bigint","type":"bigint"},{"name":"varchar","type":"varchar","length":10},{"name":"decimal","type":"decimal","precision":10,"scale":4},{"name":"float","type":"float"},{"name":"double","type":"double"},{"name":"boolean","type":"boolean"},{"name":"date","type":"date"},{"name":"time","type":"time"},{"name":"timestamp","type":"timestamp"},{"name":"clob","type":"clob"},{"name":"blob","type":"blob"},{"name":"varbinary","type":"varbinary","length":10},{"name":"geometry","type":"geometry"}]}
33
+{"name":"types","type":"table","columns":[{"name":"id","type":"integer","pk":true},{"name":"integer","type":"integer"},{"name":"bigint","type":"bigint"},{"name":"varchar","type":"varchar","length":10},{"name":"decimal","type":"decimal","precision":10,"scale":4},{"name":"float","type":"float"},{"name":"double","type":"double"},{"name":"boolean","type":"boolean"},{"name":"date","type":"date"},{"name":"time","type":"time"},{"name":"timestamp","type":"timestamp"},{"name":"clob","type":"clob"},{"name":"blob","type":"blob"},{"name":"geometry","type":"geometry"}]}
37
 ===
34
 ===
38
 POST /records/types
35
 POST /records/types
39
 Content-Type: application/json
36
 Content-Type: application/json
40
 
37
 
41
-{"integer":2,"bigint":3,"varchar":"abc","decimal":"1.23","float":2.34,"double":3.45,"boolean":true,"date":"1970-01-01","time":"00:00:01","timestamp":"2001-02-03 04:05:06","clob":"a","blob":"YQ==","varbinary":"YQ==","geometry":"POINT(1 2)"}
38
+{"integer":2,"bigint":3,"varchar":"abc","decimal":"1.23","float":1,"double":23.45,"boolean":true,"date":"1970-01-01","time":"00:00:01","timestamp":"2001-02-03 04:05:06","clob":"a","blob":"YQ==","geometry":"POINT(1 2)"}
42
 ===
39
 ===
43
 200
40
 200
44
 Content-Type: application/json
41
 Content-Type: application/json
50
 ===
47
 ===
51
 200
48
 200
52
 Content-Type: application/json
49
 Content-Type: application/json
53
-Content-Length: 248
50
+Content-Length: 227
54
 
51
 
55
-{"id":1,"integer":2,"bigint":3,"varchar":"abc","decimal":"1.2300","float":2.34,"double":3.45,"boolean":true,"date":"1970-01-01","time":"00:00:01","timestamp":"2001-02-03 04:05:06","clob":"a","blob":"YQ==","varbinary":"YQ==","geometry":"POINT(1 2)"}
52
+{"id":1,"integer":2,"bigint":3,"varchar":"abc","decimal":"1.2300","float":1,"double":23.45,"boolean":true,"date":"1970-01-01","time":"00:00:01","timestamp":"2001-02-03 04:05:06","clob":"a","blob":"YQ==","geometry":"POINT(1 2)"}
56
 ===
53
 ===
57
 DELETE /columns/types
54
 DELETE /columns/types
58
 ===
55
 ===

Loading…
Cancel
Save