Skip to content

Commit d948946

Browse files
committed
Fix for #435
1 parent 6ca1109 commit d948946

File tree

9 files changed

+63
-7
lines changed

9 files changed

+63
-7
lines changed

api.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,6 @@ public function __construct(String $prefix, String $config)
184184
$s = DIRECTORY_SEPARATOR;
185185
$ps = PATH_SEPARATOR;
186186
if ($config == '') {
187-
$id = substr(md5(__FILE__), 0, 8);
188187
$this->path = sys_get_temp_dir() . $s . $prefix . self::SUFFIX;
189188
} elseif (strpos($config, $ps) === false) {
190189
$this->path = $config;
@@ -630,7 +629,7 @@ public function hasPk(): bool
630629
return $this->pk != null;
631630
}
632631

633-
public function getPk(): ReflectedColumn
632+
public function getPk() /*: ?ReflectedColumn */
634633
{
635634
return $this->pk;
636635
}
@@ -1917,6 +1916,9 @@ public function selectAll(ReflectedTable $table, array $columnNames, Condition $
19171916
if ($limit == 0) {
19181917
return array();
19191918
}
1919+
if (!$columnOrdering) {
1920+
return $this->selectAllUnordered($table, $columnNames, $condition);
1921+
}
19201922
$selectColumns = $this->columns->getSelect($table, $columnNames);
19211923
$tableName = $table->getName();
19221924
$condition = $this->addAuthorizationCondition($condition);
@@ -3825,7 +3827,10 @@ public function getColumnOrdering(ReflectedTable $table, array $params): array
38253827
}
38263828
}
38273829
if (count($fields) == 0) {
3828-
$fields[] = [$table->getPk()->getName(), 'ASC'];
3830+
$pk = $table->getPk();
3831+
if ($pk) {
3832+
$fields[] = [$pk->getName(), 'ASC'];
3833+
}
38293834
}
38303835
return $fields;
38313836
}

src/Tqdev/PhpCrudApi/Column/Reflection/ReflectedTable.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public function hasPk(): bool
8484
return $this->pk != null;
8585
}
8686

87-
public function getPk(): ReflectedColumn
87+
public function getPk() /*: ?ReflectedColumn */
8888
{
8989
return $this->pk;
9090
}

src/Tqdev/PhpCrudApi/Database/GenericDB.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,9 @@ public function selectAll(ReflectedTable $table, array $columnNames, Condition $
192192
if ($limit == 0) {
193193
return array();
194194
}
195+
if (!$columnOrdering) {
196+
return $this->selectAllUnordered($table, $columnNames, $condition);
197+
}
195198
$selectColumns = $this->columns->getSelect($table, $columnNames);
196199
$tableName = $table->getName();
197200
$condition = $this->addAuthorizationCondition($condition);

src/Tqdev/PhpCrudApi/Record/OrderingInfo.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,10 @@ public function getColumnOrdering(ReflectedTable $table, array $params): array
2626
}
2727
}
2828
if (count($fields) == 0) {
29-
$fields[] = [$table->getPk()->getName(), 'ASC'];
29+
$pk = $table->getPk();
30+
if ($pk) {
31+
$fields[] = [$pk->getName(), 'ASC'];
32+
}
3033
}
3134
return $fields;
3235
}

tests/fixtures/blog_mysql.sql

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,14 @@ CREATE TABLE `invisibles` (
169169
INSERT INTO `invisibles` (`id`) VALUES
170170
('e42c77c6-06a4-4502-816c-d112c7142e6d');
171171

172+
DROP TABLE IF EXISTS `nopk`;
173+
CREATE TABLE `nopk` (
174+
`id` varchar(36) NOT NULL
175+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
176+
177+
INSERT INTO `nopk` (`id`) VALUES
178+
('e42c77c6-06a4-4502-816c-d112c7142e6d');
179+
172180
SET foreign_key_checks = 1;
173181

174182
-- 2016-11-05 13:11:47

tests/fixtures/blog_pgsql.sql

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ DROP TABLE IF EXISTS barcodes CASCADE;
3232
DROP TABLE IF EXISTS barcodes2 CASCADE;
3333
DROP TABLE IF EXISTS "kunsthåndværk" CASCADE;
3434
DROP TABLE IF EXISTS invisibles CASCADE;
35+
DROP TABLE IF EXISTS nopk CASCADE;
3536

3637
--
3738
-- Name: categories; Type: TABLE; Schema: public; Owner: postgres; Tablespace:
@@ -169,6 +170,14 @@ CREATE TABLE "invisibles" (
169170
id character varying(36) NOT NULL
170171
);
171172

173+
--
174+
-- Name: nopk; Type: TABLE; Schema: public; Owner: postgres; Tablespace:
175+
--
176+
177+
CREATE TABLE "nopk" (
178+
id character varying(36) NOT NULL
179+
);
180+
172181
--
173182
-- Data for Name: categories; Type: TABLE DATA; Schema: public; Owner: postgres
174183
--
@@ -264,6 +273,13 @@ INSERT INTO "kunsthåndværk" ("id", "Umlauts ä_ö_ü-COUNT", "invisible") VALU
264273
INSERT INTO "invisibles" ("id") VALUES
265274
('e42c77c6-06a4-4502-816c-d112c7142e6d');
266275

276+
--
277+
-- Data for Name: nopk; Type: TABLE DATA; Schema: public; Owner: postgres
278+
--
279+
280+
INSERT INTO "nopk" ("id") VALUES
281+
('e42c77c6-06a4-4502-816c-d112c7142e6d');
282+
267283
--
268284
-- Name: categories_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace:
269285
--

tests/fixtures/blog_sqlsrv.sql

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,12 @@ DROP TABLE [invisibles]
118118
END
119119
GO
120120

121+
IF (OBJECT_ID('nopk', 'U') IS NOT NULL)
122+
BEGIN
123+
DROP TABLE [nopk]
124+
END
125+
GO
126+
121127
CREATE TABLE [categories](
122128
[id] [int] IDENTITY,
123129
[name] [nvarchar](255) NOT NULL,
@@ -231,6 +237,11 @@ CREATE TABLE [invisibles](
231237
)
232238
GO
233239

240+
CREATE TABLE [nopk](
241+
[id] [nvarchar](36)
242+
)
243+
GO
244+
234245
INSERT [categories] ([name], [icon]) VALUES (N'announcement', NULL)
235246
GO
236247
INSERT [categories] ([name], [icon]) VALUES (N'article', NULL)
@@ -289,6 +300,9 @@ GO
289300
INSERT [invisibles] ([id]) VALUES ('e42c77c6-06a4-4502-816c-d112c7142e6d')
290301
GO
291302

303+
INSERT [nopk] ([id]) VALUES ('e42c77c6-06a4-4502-816c-d112c7142e6d')
304+
GO
305+
292306
ALTER TABLE [comments] WITH CHECK ADD CONSTRAINT [FK_comments_posts] FOREIGN KEY([post_id])
293307
REFERENCES [posts] ([id])
294308
GO
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
GET /records/nopk
2+
===
3+
200
4+
Content-Type: application/json
5+
Content-Length: 59
6+
7+
{"records":[{"id":"e42c77c6-06a4-4502-816c-d112c7142e6d"}]}

tests/functional/002_columns/001_get_database.log

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ GET /columns
22
===
33
200
44
Content-Type: application/json
5-
Content-Length: 2153
5+
Content-Length: 2224
66

7-
{"name":"php-crud-api","tables":[{"name":"barcodes","columns":[{"name":"id","type":"integer","pk":true},{"name":"product_id","type":"integer","fk":"products"},{"name":"hex","type":"varchar","length":255},{"name":"bin","type":"blob"}]},{"name":"categories","columns":[{"name":"id","type":"integer","pk":true},{"name":"name","type":"varchar","length":255},{"name":"icon","type":"blob","nullable":true}]},{"name":"comments","columns":[{"name":"id","type":"integer","pk":true},{"name":"post_id","type":"integer","fk":"posts"},{"name":"message","type":"varchar","length":255}]},{"name":"countries","columns":[{"name":"id","type":"integer","pk":true},{"name":"name","type":"varchar","length":255},{"name":"shape","type":"geometry"}]},{"name":"events","columns":[{"name":"id","type":"integer","pk":true},{"name":"name","type":"varchar","length":255},{"name":"datetime","type":"timestamp"},{"name":"visitors","type":"integer"}]},{"name":"kunsthåndværk","columns":[{"name":"id","type":"varchar","length":36,"pk":true},{"name":"Umlauts ä_ö_ü-COUNT","type":"integer"}]},{"name":"post_tags","columns":[{"name":"id","type":"integer","pk":true},{"name":"post_id","type":"integer","fk":"posts"},{"name":"tag_id","type":"integer","fk":"tags"}]},{"name":"posts","columns":[{"name":"id","type":"integer","pk":true},{"name":"user_id","type":"integer","fk":"users"},{"name":"category_id","type":"integer","fk":"categories"},{"name":"content","type":"varchar","length":255}]},{"name":"products","columns":[{"name":"id","type":"integer","pk":true},{"name":"name","type":"varchar","length":255},{"name":"price","type":"decimal","precision":10,"scale":2},{"name":"properties","type":"clob"},{"name":"created_at","type":"timestamp"},{"name":"deleted_at","type":"timestamp","nullable":true}]},{"name":"tags","columns":[{"name":"id","type":"integer","pk":true},{"name":"name","type":"varchar","length":255},{"name":"is_important","type":"boolean"}]},{"name":"users","columns":[{"name":"id","type":"integer","pk":true},{"name":"username","type":"varchar","length":255},{"name":"password","type":"varchar","length":255},{"name":"location","type":"geometry","nullable":true}]}]}
7+
{"name":"php-crud-api","tables":[{"name":"barcodes","columns":[{"name":"id","type":"integer","pk":true},{"name":"product_id","type":"integer","fk":"products"},{"name":"hex","type":"varchar","length":255},{"name":"bin","type":"blob"}]},{"name":"categories","columns":[{"name":"id","type":"integer","pk":true},{"name":"name","type":"varchar","length":255},{"name":"icon","type":"blob","nullable":true}]},{"name":"comments","columns":[{"name":"id","type":"integer","pk":true},{"name":"post_id","type":"integer","fk":"posts"},{"name":"message","type":"varchar","length":255}]},{"name":"countries","columns":[{"name":"id","type":"integer","pk":true},{"name":"name","type":"varchar","length":255},{"name":"shape","type":"geometry"}]},{"name":"events","columns":[{"name":"id","type":"integer","pk":true},{"name":"name","type":"varchar","length":255},{"name":"datetime","type":"timestamp"},{"name":"visitors","type":"integer"}]},{"name":"kunsthåndværk","columns":[{"name":"id","type":"varchar","length":36,"pk":true},{"name":"Umlauts ä_ö_ü-COUNT","type":"integer"}]},{"name":"nopk","columns":[{"name":"id","type":"varchar","length":36}]},{"name":"post_tags","columns":[{"name":"id","type":"integer","pk":true},{"name":"post_id","type":"integer","fk":"posts"},{"name":"tag_id","type":"integer","fk":"tags"}]},{"name":"posts","columns":[{"name":"id","type":"integer","pk":true},{"name":"user_id","type":"integer","fk":"users"},{"name":"category_id","type":"integer","fk":"categories"},{"name":"content","type":"varchar","length":255}]},{"name":"products","columns":[{"name":"id","type":"integer","pk":true},{"name":"name","type":"varchar","length":255},{"name":"price","type":"decimal","precision":10,"scale":2},{"name":"properties","type":"clob"},{"name":"created_at","type":"timestamp"},{"name":"deleted_at","type":"timestamp","nullable":true}]},{"name":"tags","columns":[{"name":"id","type":"integer","pk":true},{"name":"name","type":"varchar","length":255},{"name":"is_important","type":"boolean"}]},{"name":"users","columns":[{"name":"id","type":"integer","pk":true},{"name":"username","type":"varchar","length":255},{"name":"password","type":"varchar","length":255},{"name":"location","type":"geometry","nullable":true}]}]}

0 commit comments

Comments
 (0)