@@ -4,7 +4,8 @@ statement ok
4
4
SET CLUSTER SETTING sql.cross_db_views.enabled = TRUE
5
5
6
6
statement ok
7
- CREATE TABLE t (a INT PRIMARY KEY, b INT)
7
+ CREATE TABLE t (a INT PRIMARY KEY, b INT);
8
+ CREATE TABLE u (a INT PRIMARY KEY, b INT);
8
9
9
10
let $t_id
10
11
SELECT id FROM system.namespace WHERE name='t'
@@ -401,68 +402,244 @@ CREATE VIEW virt2 AS SELECT range_id, lease_holder FROM crdb_internal.ranges
401
402
statement ok
402
403
DROP VIEW virt2
403
404
404
- # Verify correct rejection of star expressions
405
- # TODO(a-robinson): Support star expressions as soon as we can (#10028)
405
+ statement ok
406
+ CREATE VIEW star1 AS SELECT * FROM t
407
+
408
+ statement ok
409
+ CREATE VIEW star2 AS SELECT t.* FROM t
410
+
411
+ # Note: this is affected by
412
+ # https://github.com/cockroachdb/cockroach/issues/97520
413
+ statement ok
414
+ CREATE VIEW star3 AS SELECT a FROM t ORDER BY t.*
415
+
416
+ # Note: this is affected by
417
+ # https://github.com/cockroachdb/cockroach/issues/97520
418
+ statement ok
419
+ CREATE VIEW star4 AS SELECT count(1) FROM t GROUP BY t.*
420
+
421
+ statement ok
422
+ CREATE VIEW star5 AS SELECT alias.* FROM t AS alias
406
423
407
- statement error views do not currently support \* expressions
408
- create view s1 AS SELECT * FROM t
424
+ statement ok
425
+ CREATE VIEW star6 AS TABLE t
409
426
410
- statement error views do not currently support \* expressions
411
- create view s1 AS SELECT t. * FROM t
427
+ statement ok
428
+ CREATE VIEW star7 AS SELECT a FROM (SELECT * FROM t)
412
429
413
- statement error views do not currently support \* expressions
414
- create view s1 AS SELECT a FROM t ORDER BY t.*
430
+ statement ok
431
+ CREATE VIEW star8 AS SELECT a FROM t WHERE NOT a IN (SELECT a FROM (SELECT * FROM t))
415
432
416
- statement error views do not currently support \* expressions
417
- create view s1 AS SELECT count(1) FROM t GROUP BY t.*
433
+ statement ok
434
+ CREATE VIEW star9 AS SELECT a FROM t GROUP BY a HAVING a IN (SELECT a FROM (SELECT * FROM t))
418
435
419
- statement error views do not currently support \* expressions
420
- create view s1 AS SELECT alias.* FROM t AS alias
436
+ # This error is the same as in postgres.
437
+ statement error duplicate column name: "a"
438
+ CREATE VIEW star10 AS SELECT t1.*, t2.a FROM t AS t1 JOIN t AS t2 ON t1.a = t2.a
421
439
422
- statement error views do not currently support \* expressions
423
- create view s1 AS TABLE t
440
+ statement ok
441
+ CREATE VIEW star10 AS SELECT t1.*, t2.a AS a2 FROM t AS t1 JOIN t AS t2 ON t1.a = t2.a
424
442
425
- statement error views do not currently support \* expressions
426
- create view s1 AS SELECT a FROM (SELECT * FROM t)
443
+ # This error is the same as in postgres.
444
+ statement error duplicate column name: "a"
445
+ CREATE VIEW star11 AS SELECT t1.a, t2.* FROM t AS t1 JOIN t AS t2 ON t1.a = t2.a
427
446
428
- statement error views do not currently support \* expressions
429
- create view s1 AS SELECT a FROM t WHERE NOT a IN (SELECT a FROM (SELECT * FROM t))
447
+ statement ok
448
+ CREATE VIEW star11 AS SELECT t1.a AS a1, t2.* FROM t AS t1 JOIN t AS t2 ON t1.a = t2.a
430
449
431
- statement error views do not currently support \* expressions
432
- create view s1 AS SELECT a FROM t GROUP BY a HAVING a IN (SELECT a FROM (SELECT * FROM t))
450
+ # This error is the same as in postgres.
451
+ statement error duplicate column name: "a"
452
+ CREATE VIEW star12 AS SELECT t1.*, t2.* FROM t AS t1 JOIN t AS t2 ON t1.a = t2.a
433
453
434
- statement error views do not currently support \* expressions
435
- create view s1 AS SELECT t1.*, t2.a FROM t AS t1 JOIN t AS t2 ON t1.a = t2.a
454
+ # This error is the same as in postgres.
455
+ statement error duplicate column name: "a"
456
+ CREATE VIEW star13 AS SELECT * FROM t AS t1 JOIN t AS t2 ON t1.a = t2.a
436
457
437
- statement error views do not currently support \* expressions
438
- create view s1 AS SELECT t1.a, t2.* FROM t AS t1 JOIN t AS t2 ON t1.a = t2.a
458
+ statement ok
459
+ CREATE VIEW star14 AS SELECT t1.a, t2.a AS a2 FROM (SELECT * FROM t) AS t1 JOIN t AS t2 ON t1.a = t2.a
439
460
440
- statement error views do not currently support \* expressions
441
- create view s1 AS SELECT t1.* , t2.* FROM t AS t1 JOIN t AS t2 ON t1.a = t2.a
461
+ statement ok
462
+ CREATE VIEW star15 AS SELECT t1.a , t2.a AS a2 FROM t AS t1 JOIN (SELECT * FROM t) AS t2 ON t1.a = t2.a
442
463
443
- statement error views do not currently support \* expressions
444
- create view s1 AS SELECT * FROM t AS t1 JOIN t AS t2 ON t1.a = t2.a
464
+ statement ok
465
+ CREATE VIEW star16 AS SELECT t1.a, t2.a AS a2 FROM t AS t1 JOIN t AS t2 ON t1.a IN (SELECT a FROM (SELECT * FROM t))
445
466
446
- statement error views do not currently support \* expressions
447
- create view s1 AS SELECT t1.a, t2.a FROM (SELECT * FROM t) AS t1 JOIN t AS t2 ON t1.a = t2.a
467
+ # This error is the same as in postgres.
468
+ statement error duplicate column name: "a"
469
+ CREATE VIEW star17 AS SELECT * FROM (SELECT a FROM t) t1 JOIN (SELECT a FROM u) t2 ON true;
448
470
449
- statement error views do not currently support \* expressions
450
- create view s1 AS SELECT t1.a, t2.a FROM t AS t1 JOIN (SELECT * FROM t) AS t2 ON t1.a = t2.a
471
+ # Ditto for crdb's special feature where subquery aliases can be omitted.
472
+ statement error duplicate column name: "a"
473
+ CREATE VIEW star17 AS SELECT * FROM (SELECT a FROM t) JOIN (SELECT a FROM u) ON true;
451
474
452
- statement error views do not currently support \* expressions
453
- create view s1 AS SELECT t1.a, t2.a FROM t AS t1 JOIN t AS t2 ON t1.a IN (SELECT a FROM (SELECT * FROM t))
475
+ statement ok
476
+ CREATE VIEW star17 AS SELECT * FROM (SELECT a FROM t) JOIN (SELECT b FROM u) ON true;
454
477
455
478
statement ok
456
- create view s1 AS SELECT count(*) FROM t
479
+ CREATE VIEW star18 AS SELECT * FROM (SELECT * FROM (SELECT a FROM t));
457
480
458
481
statement ok
459
- create view s2 AS SELECT a FROM t WHERE a IN (SELECT count(*) FROM t)
482
+ CREATE VIEW star19 AS SELECT a FROM (SELECT * FROM (SELECT a FROM t));
460
483
461
484
statement ok
462
- create view s3 AS SELECT a, count(*) FROM t GROUP BY a
485
+ CREATE VIEW star20 AS SELECT ARRAY[z.*]::STRING FROM (SELECT * FROM (SELECT a FROM t), (SELECT a FROM t)) AS z
463
486
464
487
statement ok
465
- create view s4 AS SELECT a, count(*) FROM t GROUP BY a HAVING a > (SELECT count(*) FROM t)
488
+ ALTER TABLE t ADD COLUMN c INT
489
+
490
+ statement error cannot drop column "b" because view "star1" depends on it
491
+ ALTER TABLE t DROP COLUMN b
492
+
493
+ # See: https://github.com/cockroachdb/cockroach/issues/10083
494
+ statement error cannot rename column "b" because view "star1" depends on it
495
+ ALTER TABLE t RENAME COLUMN b TO d
496
+
497
+ query TT
498
+ SELECT descriptor_name, create_statement FROM crdb_internal.create_statements WHERE descriptor_name LIKE 'star%' ORDER BY 1
499
+ ----
500
+ star1 CREATE VIEW public.star1 (
501
+ a,
502
+ b
503
+ ) AS SELECT t.a, t.b FROM test.public.t
504
+ star10 CREATE VIEW public.star10 (
505
+ a,
506
+ b,
507
+ a2
508
+ ) AS SELECT t1.a, t1.b, t2.a AS a2 FROM test.public.t AS t1 JOIN test.public.t AS t2 ON t1.a = t2.a
509
+ star11 CREATE VIEW public.star11 (
510
+ a1,
511
+ a,
512
+ b
513
+ ) AS SELECT t1.a AS a1, t2.a, t2.b FROM test.public.t AS t1 JOIN test.public.t AS t2 ON t1.a = t2.a
514
+ star14 CREATE VIEW public.star14 (
515
+ a,
516
+ a2
517
+ ) AS SELECT
518
+ t1.a, t2.a AS a2
519
+ FROM
520
+ (SELECT t.a, t.b FROM test.public.t) AS t1 JOIN test.public.t AS t2 ON t1.a = t2.a
521
+ star15 CREATE VIEW public.star15 (
522
+ a,
523
+ a2
524
+ ) AS SELECT
525
+ t1.a, t2.a AS a2
526
+ FROM
527
+ test.public.t AS t1 JOIN (SELECT t.a, t.b FROM test.public.t) AS t2 ON t1.a = t2.a
528
+ star16 CREATE VIEW public.star16 (
529
+ a,
530
+ a2
531
+ ) AS SELECT
532
+ t1.a, t2.a AS a2
533
+ FROM
534
+ test.public.t AS t1
535
+ JOIN test.public.t AS t2 ON
536
+ t1.a IN (SELECT a FROM (SELECT t.a, t.b FROM test.public.t) AS "?subquery1?")
537
+ star17 CREATE VIEW public.star17 (
538
+ a,
539
+ b
540
+ ) AS SELECT
541
+ "?subquery1?".a, "?subquery2?".b
542
+ FROM
543
+ (SELECT a FROM test.public.t) AS "?subquery1?"
544
+ JOIN (SELECT b FROM test.public.u) AS "?subquery2?" ON true
545
+ star18 CREATE VIEW public.star18 (
546
+ a
547
+ ) AS SELECT
548
+ "?subquery1?".a
549
+ FROM
550
+ (SELECT "?subquery2?".a FROM (SELECT a FROM test.public.t) AS "?subquery2?")
551
+ AS "?subquery1?"
552
+ star19 CREATE VIEW public.star19 (
553
+ a
554
+ ) AS SELECT
555
+ a
556
+ FROM
557
+ (SELECT "?subquery2?".a FROM (SELECT a FROM test.public.t) AS "?subquery2?")
558
+ AS "?subquery1?"
559
+ star2 CREATE VIEW public.star2 (
560
+ a,
561
+ b
562
+ ) AS SELECT t.a, t.b FROM test.public.t
563
+ star20 CREATE VIEW public.star20 (
564
+ "array"
565
+ ) AS SELECT
566
+ ARRAY[z.*]::STRING
567
+ FROM
568
+ (
569
+ SELECT
570
+ "?subquery1?".a, "?subquery2?".a
571
+ FROM
572
+ (SELECT a FROM test.public.t) AS "?subquery1?",
573
+ (SELECT a FROM test.public.t) AS "?subquery2?"
574
+ )
575
+ AS z
576
+ star3 CREATE VIEW public.star3 (
577
+ a
578
+ ) AS SELECT a FROM test.public.t ORDER BY t.*
579
+ star4 CREATE VIEW public.star4 (
580
+ count
581
+ ) AS SELECT count(1:::INT8) FROM test.public.t GROUP BY t.*
582
+ star5 CREATE VIEW public.star5 (
583
+ a,
584
+ b
585
+ ) AS SELECT alias.a, alias.b FROM test.public.t AS alias
586
+ star6 CREATE VIEW public.star6 (
587
+ a,
588
+ b
589
+ ) AS TABLE test.public.t
590
+ star7 CREATE VIEW public.star7 (
591
+ a
592
+ ) AS SELECT a FROM (SELECT t.a, t.b FROM test.public.t) AS "?subquery1?"
593
+ star8 CREATE VIEW public.star8 (
594
+ a
595
+ ) AS SELECT
596
+ a
597
+ FROM
598
+ test.public.t
599
+ WHERE
600
+ NOT (a IN (SELECT a FROM (SELECT t.a, t.b FROM test.public.t) AS "?subquery1?"))
601
+ star9 CREATE VIEW public.star9 (
602
+ a
603
+ ) AS SELECT
604
+ a
605
+ FROM
606
+ test.public.t
607
+ GROUP BY
608
+ a
609
+ HAVING
610
+ a IN (SELECT a FROM (SELECT t.a, t.b FROM test.public.t) AS "?subquery1?")
611
+
612
+ statement ok
613
+ DROP VIEW star1;
614
+ DROP VIEW star2;
615
+ DROP VIEW star3;
616
+ DROP VIEW star4;
617
+ DROP VIEW star5;
618
+ DROP VIEW star6;
619
+ DROP VIEW star7;
620
+ DROP VIEW star8;
621
+ DROP VIEW star9;
622
+ DROP VIEW star10;
623
+ DROP VIEW star11;
624
+ DROP VIEW star14;
625
+ DROP VIEW star15;
626
+ DROP VIEW star16;
627
+ DROP VIEW star17;
628
+ DROP VIEW star18;
629
+ DROP VIEW star19;
630
+ DROP VIEW star20;
631
+
632
+ statement ok
633
+ CREATE VIEW s1 AS SELECT count(*) FROM t
634
+
635
+ statement ok
636
+ CREATE VIEW s2 AS SELECT a FROM t WHERE a IN (SELECT count(*) FROM t)
637
+
638
+ statement ok
639
+ CREATE VIEW s3 AS SELECT a, count(*) FROM t GROUP BY a
640
+
641
+ statement ok
642
+ CREATE VIEW s4 AS SELECT a, count(*) FROM t GROUP BY a HAVING a > (SELECT count(*) FROM t)
466
643
467
644
statement ok
468
645
DROP VIEW s4
@@ -477,7 +654,7 @@ statement ok
477
654
DROP VIEW s1
478
655
479
656
statement ok
480
- DROP TABLE t
657
+ DROP TABLE t; DROP TABLE u
481
658
482
659
# Check for memory leak (#10466)
483
660
statement ok
@@ -1121,7 +1298,7 @@ CREATE VIEW v7_dep AS (SELECT i FROM t6@idx WHERE k < 'a'::typ6)
1121
1298
statement error cannot drop type "typ6" because other objects \(\[db2.public.t6 db2.public.v7_dep\]\) still depend on it
1122
1299
DROP TYPE typ6
1123
1300
1124
- # Test we can create views from various data sources.
1301
+ # Test we can CREATE VIEWs from various data sources.
1125
1302
statement ok
1126
1303
CREATE SEQUENCE s
1127
1304
0 commit comments