diff --git a/src/Tqdev/PhpCrudApi/Database/DataConverter.php b/src/Tqdev/PhpCrudApi/Database/DataConverter.php index c411310..0c7dd27 100644 --- a/src/Tqdev/PhpCrudApi/Database/DataConverter.php +++ b/src/Tqdev/PhpCrudApi/Database/DataConverter.php @@ -26,7 +26,7 @@ class DataConverter case 'float': return (float) $value; case 'decimal': - return sprintf('%.' . $args[0] . 'f', $value); + return number_format($value, $args[0], '.', ''); } return $value; } @@ -39,7 +39,7 @@ class DataConverter if (in_array($this->driver, ['sqlsrv', 'sqlite']) && in_array($column->getType(), ['integer', 'bigint'])) { return 'integer'; } - if (in_array($this->driver, ['sqlite']) && in_array($column->getType(), ['float', 'double'])) { + if (in_array($this->driver, ['sqlite', 'pgsql']) && in_array($column->getType(), ['float', 'double'])) { return 'float'; } if (in_array($this->driver, ['sqlite']) && in_array($column->getType(), ['decimal'])) { diff --git a/src/Tqdev/PhpCrudApi/Database/GenericDefinition.php b/src/Tqdev/PhpCrudApi/Database/GenericDefinition.php index fe53d5c..b664fa3 100644 --- a/src/Tqdev/PhpCrudApi/Database/GenericDefinition.php +++ b/src/Tqdev/PhpCrudApi/Database/GenericDefinition.php @@ -72,7 +72,7 @@ class GenericDefinition return $column->getPk() ? ' AUTO_INCREMENT' : ''; case 'pgsql': case 'sqlsrv': - return ''; + return $column->getPk() ? ' IDENTITY(1,1)' : ''; case 'sqlite': return $column->getPk() ? ' AUTOINCREMENT' : ''; } @@ -440,7 +440,7 @@ class GenericDefinition private function query(string $sql, array $arguments): bool { $stmt = $this->pdo->prepare($sql); - //echo "- $sql -- " . json_encode($arguments) . "\n"; + // echo "- $sql -- " . json_encode($arguments) . "\n"; return $stmt->execute($arguments); } } diff --git a/src/Tqdev/PhpCrudApi/Database/TypeConverter.php b/src/Tqdev/PhpCrudApi/Database/TypeConverter.php index b5a5f92..53c0729 100644 --- a/src/Tqdev/PhpCrudApi/Database/TypeConverter.php +++ b/src/Tqdev/PhpCrudApi/Database/TypeConverter.php @@ -23,14 +23,15 @@ class TypeConverter 'blob' => 'bytea', 'float' => 'real', 'double' => 'double precision', - 'varbinary(*)' => 'bytea', + 'varbinary' => 'bytea', ], 'sqlsrv' => [ 'boolean' => 'bit', 'varchar' => 'nvarchar', 'clob' => 'ntext', 'blob' => 'image', - 'timestamp' => 'datetime2', + 'time' => 'time(0)', + 'timestamp' => 'datetime2(0)', 'double' => 'float', 'float' => 'real', ], diff --git a/tests/functional/003_columns/014_create_types_table.log b/tests/functional/003_columns/014_create_types_table.log index c7e64a7..99f4935 100644 --- a/tests/functional/003_columns/014_create_types_table.log +++ b/tests/functional/003_columns/014_create_types_table.log @@ -1,5 +1,3 @@ -skip-for-pgsql: varbinary is not properly supported yet -skip-for-sqlsrv: float has high precision and time and datetime have microseconds === POST /columns @@ -17,7 +15,6 @@ POST /columns {"name":"timestamp","type":"timestamp"}, {"name":"clob","type":"clob"}, {"name":"blob","type":"blob"}, -{"name":"varbinary","type":"varbinary","length":10}, {"name":"geometry","type":"geometry"} ]} === @@ -31,14 +28,14 @@ GET /columns/types === 200 Content-Type: application/json -Content-Length: 615 +Content-Length: 563 -{"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"}]} +{"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"}]} === POST /records/types Content-Type: application/json -{"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)"} +{"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)"} === 200 Content-Type: application/json @@ -50,9 +47,9 @@ GET /records/types/1 === 200 Content-Type: application/json -Content-Length: 248 +Content-Length: 227 -{"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)"} +{"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)"} === DELETE /columns/types ===