X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Manual.git;a=blobdiff_plain;f=lib%2FCatalyst%2FManual%2FTutorial%2F10_Appendices.pod;h=8c4b513868bcdd9f1dbf9cc66a6637e1e7e5624e;hp=ac3bccf4f87d88d9aeb2f0cb0e0d2ee597a0e551;hb=7ce05098c9b1df9078e709e5a724e821a3b3b00d;hpb=b6e53c1ca5bfa271bfce99e0f42a56c8fd4df4be diff --git a/lib/Catalyst/Manual/Tutorial/10_Appendices.pod b/lib/Catalyst/Manual/Tutorial/10_Appendices.pod index ac3bccf..8c4b513 100644 --- a/lib/Catalyst/Manual/Tutorial/10_Appendices.pod +++ b/lib/Catalyst/Manual/Tutorial/10_Appendices.pod @@ -126,11 +126,11 @@ commands such as C to set the mark at the cursor location and C> and C> to set the mark at the beginning and end of the file respectively. -Also, Stefan Kangas sent in the following tip about an alternate -approach using the command C to redo the indentation -for the currently selected region (adhering to indent rules in the -current major mode). You can run the command by typing M-x -indent-region or pressing the default keybinding C-M-\ in cperl-mode. +Also, Stefan Kangas sent in the following tip about an alternate +approach using the command C to redo the indentation +for the currently selected region (adhering to indent rules in the +current major mode). You can run the command by typing M-x +indent-region or pressing the default keybinding C-M-\ in cperl-mode. Additional details can be found here: L @@ -158,9 +158,9 @@ field types/constraints. =head2 PostgreSQL -Use the following steps to adapt the tutorial to PostgreSQL. Thanks -to Caelum (Rafael Kitover) for assistance with the most recent -updates, and Louis Moore, Marcello Romani and Tom Lanyon for help with +Use the following steps to adapt the tutorial to PostgreSQL. Thanks +to Caelum (Rafael Kitover) for assistance with the most recent +updates, and Louis Moore, Marcello Romani and Tom Lanyon for help with earlier versions. =over 4 @@ -180,8 +180,8 @@ items via this command: sudo aptitude install postgresql libdbd-pg-perl libdatetime-format-pg-perl -To configure the permissions, you can open -C and change this line (near the +To configure the permissions, you can open +C and change this line (near the bottom): # "local" is for Unix domain socket connections only @@ -199,8 +199,8 @@ And then restart PostgreSQL: =item * -Create the database and a user for the database (note that we are -using "EcatalystE" to represent the hidden password of +Create the database and a user for the database (note that we are +using "EcatalystE" to represent the hidden password of "catalyst"): $ sudo -u postgres createuser -P catappuser @@ -232,7 +232,7 @@ Open the C in your editor and enter: DROP TABLE IF EXISTS users CASCADE; DROP TABLE IF EXISTS roles CASCADE; DROP TABLE IF EXISTS user_roles CASCADE; - + -- -- Create a very simple database to hold book and author information -- @@ -244,20 +244,20 @@ Open the C in your editor and enter: -- created TIMESTAMP NOT NULL DEFAULT now(), -- updated TIMESTAMP ); - + CREATE TABLE authors ( id SERIAL PRIMARY KEY, first_name TEXT, last_name TEXT ); - + -- 'book_authors' is a many-to-many join table between books & authors CREATE TABLE book_authors ( book_id INTEGER REFERENCES books(id) ON DELETE CASCADE ON UPDATE CASCADE, author_id INTEGER REFERENCES authors(id) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY (book_id, author_id) ); - + --- --- Load some sample data --- @@ -288,7 +288,7 @@ Open the C in your editor and enter: Load the data: $ psql -U catappuser -W catappdb -f myapp01_psql.sql - Password for user catappuser: + Password for user catappuser: psql:myapp01_psql.sql:8: NOTICE: CREATE TABLE will create implicit sequence "books_id_seq" for serial column "books.id" psql:myapp01_psql.sql:8: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "books_pkey" for table "books" CREATE TABLE @@ -309,24 +309,24 @@ Make sure the data loaded correctly: $ psql -U catappuser -W catappdb Password for user catappuser: Welcome to psql 8.3.7, the PostgreSQL interactive terminal. - + Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit - + catappdb=> \dt List of relations - Schema | Name | Type | Owner + Schema | Name | Type | Owner --------+--------------+-------+------------ public | authors | table | catappuser public | book_authors | table | catappuser public | books | table | catappuser (3 rows) - + catappdb=> select * from books; - id | title | rating + id | title | rating ----+------------------------------------+-------- 1 | CCSP SNRS Exam Certification Guide | 5 2 | TCP/IP Illustrated, Volume 1 | 5 @@ -334,8 +334,8 @@ Make sure the data loaded correctly: 4 | Perl Cookbook | 5 5 | Designing with Web Standards | 5 (5 rows) - - catappdb=> + + catappdb=> =back @@ -344,13 +344,13 @@ Make sure the data loaded correctly: After the steps where you: edit lib/MyApp.pm - + create lib/MyAppDB.pm - + create lib/MyAppDB/Book.pm - + create lib/MyAppDB/Author.pm - + create lib/MyAppDB/BookAuthor.pm @@ -401,7 +401,7 @@ Open C in your editor and enter: -- -- Add users and roles tables, along with a many-to-many join table -- - + CREATE TABLE users ( id SERIAL PRIMARY KEY, username TEXT, @@ -411,24 +411,24 @@ Open C in your editor and enter: last_name TEXT, active INTEGER ); - + CREATE TABLE roles ( id SERIAL PRIMARY KEY, role TEXT ); - + CREATE TABLE user_roles ( user_id INTEGER REFERENCES users(id) ON DELETE CASCADE ON UPDATE CASCADE, role_id INTEGER REFERENCES roles(id) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY (user_id, role_id) ); - + -- -- Load up some initial test data -- - INSERT INTO users (username, password, email_address, first_name, last_name, active) + INSERT INTO users (username, password, email_address, first_name, last_name, active) VALUES ('test01', 'mypass', 't01@na.com', 'Joe', 'Blow', 1); - INSERT INTO users (username, password, email_address, first_name, last_name, active) + INSERT INTO users (username, password, email_address, first_name, last_name, active) VALUES ('test02', 'mypass', 't02@na.com', 'Jane', 'Doe', 1); INSERT INTO users (username, password, email_address, first_name, last_name, active) VALUES ('test03', 'mypass', 't03@na.com', 'No', 'Go', 0); @@ -467,7 +467,7 @@ Confirm with: $ psql -U catappuser -W catappdb -c "select * from users" Password for user catappuser: - id | username | password | email_address | first_name | last_name | active + id | username | password | email_address | first_name | last_name | active ----+----------+----------+---------------+------------+-----------+-------- 1 | test01 | mypass | t01@na.com | Joe | Blow | 1 2 | test02 | mypass | t02@na.com | Jane | Doe | 1 @@ -481,22 +481,22 @@ Modify C to match the following (the only difference is the C line): #!/usr/bin/perl - + use strict; use warnings; - + use MyApp::Schema; - + my $schema = MyApp::Schema->connect('dbi:Pg:dbname=catappdb', 'catappuser', 'catalyst'); - + my @users = $schema->resultset('Users')->all; - + foreach my $user (@users) { $user->password('mypass'); $user->update; } -Run the C as per the "normal" flow of the +Run the C as per the "normal" flow of the tutorial: $ perl -Ilib set_hashed_passwords.pl @@ -561,10 +561,10 @@ in you MySQL. You can simply figure out that your install supports it or not: # mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. - - Type 'help;' or '\h' for help. Type '\c' to clear the current input + + Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. - + mysql> SHOW VARIABLES LIKE 'have_innodb'; +---------------+-------+ | Variable_name | Value | @@ -572,7 +572,7 @@ in you MySQL. You can simply figure out that your install supports it or not: | have_innodb | YES | +---------------+-------+ 1 row in set (0.01 sec) - + mysql> exit Bye @@ -586,18 +586,18 @@ Create the database and set the permissions: # mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. - + Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. - + mysql> CREATE DATABASE `myapp`; Query OK, 1 row affected (0.01 sec) - + mysql> GRANT ALL PRIVILEGES ON myapp.* TO 'tutorial'@'localhost' IDENTIFIED BY 'yourpassword'; Query OK, 0 rows affected (0.00 sec) - + mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) - + mysql> exit Bye @@ -643,7 +643,7 @@ Open the C in your editor and enter: (3, 'Internetworking with TCP/IP Vol.1', 4), (4, 'Perl Cookbook', 5), (5, 'Designing with Web Standards', 5); - + INSERT INTO `book_authors` (`book_id`, `author_id`) VALUES (1, 1), (1, 2), @@ -653,7 +653,7 @@ Open the C in your editor and enter: (4, 6), (4, 7), (5, 8); - + INSERT INTO `authors` (`id`, `first_name`, `last_name`) VALUES (1, 'Greg', 'Bastien'), (2, 'Sara', 'Nasseh'), @@ -663,7 +663,7 @@ Open the C in your editor and enter: (6, 'Tom', 'Christiansen'), (7, 'Nathan', 'Torkington'), (8, 'Jeffrey', 'Zeldman'); - + ALTER TABLE `book_authors` ADD CONSTRAINT `book_author_ibfk_2` FOREIGN KEY (`author_id`) REFERENCES `authors` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT `book_author_ibfk_1` FOREIGN KEY (`book_id`) REFERENCES `books` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; @@ -681,11 +681,11 @@ Make sure the data loaded correctly: $ mysql -u tutorial -p myapp Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A - + Welcome to the MySQL monitor. Commands end with ; or \g. - + Type 'help;' or '\h' for help. Type '\c' to clear the buffer. - + mysql> show tables; +-----------------+ | Tables_in_myapp | @@ -695,7 +695,7 @@ Make sure the data loaded correctly: | books | +-----------------+ 3 rows in set (0.00 sec) - + mysql> select * from books; +----+------------------------------------+--------+ | id | title | rating | @@ -707,7 +707,7 @@ Make sure the data loaded correctly: | 5 | Designing with Web Standards | 5 | +----+------------------------------------+--------+ 5 rows in set (0.00 sec) - + mysql> =back @@ -777,18 +777,18 @@ Open C in your editor and enter: INSERT INTO `roles` (`id`, `role`) VALUES (1, 'user'), (2, 'admin'); - + INSERT INTO `users` (`id`, `username`, `password`, `email_address`, `first_name`, `last_name`, `active`) VALUES (1, 'test01', 'mypass', 't01@na.com', 'Joe', 'Blow', 1), (2, 'test02', 'mypass', 't02@na.com', 'Jane', 'Doe', 1), (3, 'test03', 'mypass', 't03@na.com', 'No', 'Go', 0); - + INSERT INTO `user_roles` (`user_id`, `role_id`) VALUES (1, 1), (2, 1), (3, 1), (1, 2); - + ALTER TABLE `user_roles ADD CONSTRAINT `user_role_ibfk_2` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT `user_role_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;