Nordstrom: Sell Due To Limited Upside
32 minutes ago
Two wrongs don't make a right, but three rights do make a left.
-----------------------------------------------------------------
-- Table: 1.) deleted_artifact_history
-----------------------------------------------------------------
--DROP TABLE deleted_artifact_history;
CREATE TABLE deleted_artifact_history(
like artifact_history
)
WITH OIDS;
ALTER TABLE deleted_artifact_history OWNER TO postgres;
GRANT ALL ON TABLE deleted_artifact_history TO postgres;
ALTER TABLE deleted_artifact_history ADD PRIMARY KEY (id);
-- Function: fn_deleted_artifact_history
CREATE OR REPLACE FUNCTION fn_deleted_artifact_history()
RETURNS trigger AS
$BODY$
BEGIN
INSERT INTO deleted_artifact_history SELECT OLD.*;
RETURN OLD;
END;
$BODY$
LANGUAGE 'plpgsql';
-- Trigger: deleted_artifact_history on artifact_history
--DROP TRIGGER deleted_artifact_history ON artifact_history;
CREATE TRIGGER deleted_artifact_history
BEFORE DELETE
ON artifact_history
FOR EACH ROW
EXECUTE PROCEDURE fn_deleted_artifact_history();
-----------------------------------------------------------------
-- Table: 2.) deleted_artifact_file
-----------------------------------------------------------------
--DROP TABLE deleted_artifact_file;
CREATE TABLE deleted_artifact_file(
like artifact_file
)
WITH OIDS;
ALTER TABLE deleted_artifact_file OWNER TO postgres;
GRANT ALL ON TABLE deleted_artifact_file TO postgres;
ALTER TABLE deleted_artifact_file ADD PRIMARY KEY (id);
-- Function: fn_deleted_artifact_file
CREATE OR REPLACE FUNCTION fn_deleted_artifact_file()
RETURNS trigger AS
$BODY$
BEGIN
INSERT INTO deleted_artifact_file SELECT OLD.*;
RETURN OLD;
END;
$BODY$
LANGUAGE 'plpgsql';
-- Trigger: deleted_artifact_file on artifact_file
--DROP TRIGGER deleted_artifact_file ON artifact_file;
CREATE TRIGGER deleted_artifact_file
BEFORE DELETE
ON artifact_file
FOR EACH ROW
EXECUTE PROCEDURE fn_deleted_artifact_file();
-----------------------------------------------------------------
-- Table: 3.) deleted_artifact_group_list
-----------------------------------------------------------------
--DROP TABLE deleted_artifact_group_list;
CREATE TABLE deleted_artifact_group_list(
like artifact_group_list
)
WITH OIDS;
ALTER TABLE deleted_artifact_group_list OWNER TO postgres;
GRANT ALL ON TABLE deleted_artifact_group_list TO postgres;
ALTER TABLE deleted_artifact_group_list ADD PRIMARY KEY (group_artifact_id);
-- Function: fn_deleted_artifact_group_list
CREATE OR REPLACE FUNCTION fn_deleted_artifact_group_list()
RETURNS trigger AS
$BODY$
BEGIN
INSERT INTO deleted_artifact_group_list SELECT OLD.*;
RETURN OLD;
END;
$BODY$
LANGUAGE 'plpgsql';
-- Trigger: deleted_artifact_group_list on artifact_group_list
--DROP TRIGGER deleted_artifact_group_list ON artifact_group_list;
CREATE TRIGGER deleted_artifact_group_list
BEFORE DELETE
ON artifact_group_list
FOR EACH ROW
EXECUTE PROCEDURE fn_deleted_artifact_group_list();
-----------------------------------------------------------------
-- Table: 4.) deleted_artifact_extra_field_data
-----------------------------------------------------------------
--DROP TABLE deleted_artifact_extra_field_data;
CREATE TABLE deleted_artifact_extra_field_data(
like artifact_extra_field_data
)
WITH OIDS;
ALTER TABLE deleted_artifact_extra_field_data OWNER TO postgres;
GRANT ALL ON TABLE deleted_artifact_extra_field_data TO postgres;
ALTER TABLE deleted_artifact_extra_field_data ADD PRIMARY KEY (data_id);
-- Function: fn_deleted_artifact_extra_field_data
CREATE OR REPLACE FUNCTION fn_deleted_artifact_extra_field_data()
RETURNS trigger AS
$BODY$
BEGIN
INSERT INTO deleted_artifact_extra_field_data SELECT OLD.*;
RETURN OLD;
END;
$BODY$
LANGUAGE 'plpgsql';
-- Trigger: deleted_artifact_extra_field_data on artifact_extra_field_data
--DROP TRIGGER deleted_artifact_extra_field_data ON artifact_extra_field_data;
CREATE TRIGGER deleted_artifact_extra_field_data
BEFORE DELETE
ON artifact_extra_field_data
FOR EACH ROW
EXECUTE PROCEDURE fn_deleted_artifact_extra_field_data();
-----------------------------------------------------------------
-- Table: 5.) deleted_artifact_extra_field_list
-----------------------------------------------------------------
--DROP TABLE deleted_artifact_extra_field_list;
CREATE TABLE deleted_artifact_extra_field_list(
like artifact_extra_field_list
)
WITH OIDS;
ALTER TABLE deleted_artifact_extra_field_list OWNER TO postgres;
GRANT ALL ON TABLE deleted_artifact_extra_field_list TO postgres;
ALTER TABLE deleted_artifact_extra_field_list ADD PRIMARY KEY (extra_field_id);
-- Function: fn_deleted_artifact_extra_field_list
CREATE OR REPLACE FUNCTION fn_deleted_artifact_extra_field_list()
RETURNS trigger AS
$BODY$
BEGIN
INSERT INTO deleted_artifact_extra_field_list SELECT OLD.*;
RETURN OLD;
END;
$BODY$
LANGUAGE 'plpgsql';
-- Trigger: deleted_artifact_extra_field_list on artifact_extra_field_list
--DROP TRIGGER deleted_artifact_extra_field_list ON artifact_extra_field_list;
CREATE TRIGGER deleted_artifact_extra_field_list
BEFORE DELETE
ON artifact_extra_field_list
FOR EACH ROW
EXECUTE PROCEDURE fn_deleted_artifact_extra_field_list();
-----------------------------------------------------------------
-- Table: 6.) deleted_artifact_perm
-----------------------------------------------------------------
--DROP TABLE deleted_artifact_perm;
CREATE TABLE deleted_artifact_perm(
like artifact_perm
)
WITH OIDS;
ALTER TABLE deleted_artifact_perm OWNER TO postgres;
GRANT ALL ON TABLE deleted_artifact_perm TO postgres;
ALTER TABLE deleted_artifact_perm ADD PRIMARY KEY (id);
-- Function: fn_deleted_artifact_perm
CREATE OR REPLACE FUNCTION fn_deleted_artifact_perm()
RETURNS trigger AS
$BODY$
BEGIN
INSERT INTO deleted_artifact_perm SELECT OLD.*;
RETURN OLD;
END;
$BODY$
LANGUAGE 'plpgsql';
-- Trigger: deleted_artifact_perm on artifact_perm
--DROP TRIGGER deleted_artifact_perm ON artifact_perm;
CREATE TRIGGER deleted_artifact_perm
BEFORE DELETE
ON artifact_perm
FOR EACH ROW
EXECUTE PROCEDURE fn_deleted_artifact_perm();
-----------------------------------------------------------------
-- Table: 7.) deleted_artifact_type_monitor
-----------------------------------------------------------------
--DROP TABLE deleted_artifact_type_monitor;
CREATE TABLE deleted_artifact_type_monitor(
like artifact_type_monitor
)
WITH OIDS;
ALTER TABLE deleted_artifact_type_monitor OWNER TO postgres;
GRANT ALL ON TABLE deleted_artifact_type_monitor TO postgres;
ALTER TABLE deleted_artifact_type_monitor ADD PRIMARY KEY (group_artifact_id,user_id);
-- Function: fn_deleted_artifact
CREATE OR REPLACE FUNCTION fn_deleted_artifact_type_monitor()
RETURNS trigger AS
$BODY$
BEGIN
INSERT INTO deleted_artifact_type_monitor SELECT OLD.*;
RETURN OLD;
END;
$BODY$
LANGUAGE 'plpgsql';
-- Trigger: deleted_artifact_type_monitor on artifact_type_monitor
--DROP TRIGGER deleted_artifact_type_monitor ON artifact_type_monitor;
CREATE TRIGGER deleted_artifact_type_monitor
BEFORE DELETE
ON artifact_type_monitor
FOR EACH ROW
EXECUTE PROCEDURE fn_deleted_artifact_type_monitor();
-----------------------------------------------------------------
-- Table: 8.) deleted_artifact_query
-----------------------------------------------------------------
--DROP TABLE deleted_artifact_query;
CREATE TABLE deleted_artifact_query(
like artifact_query
)
WITH OIDS;
ALTER TABLE deleted_artifact_query OWNER TO postgres;
GRANT ALL ON TABLE deleted_artifact_query TO postgres;
ALTER TABLE deleted_artifact_query ADD PRIMARY KEY (artifact_query_id);
-- Function: fn_deleted_artifact_query
CREATE OR REPLACE FUNCTION fn_deleted_artifact_query()
RETURNS trigger AS
$BODY$
BEGIN
INSERT INTO deleted_artifact_query SELECT OLD.*;
RETURN OLD;
END;
$BODY$
LANGUAGE 'plpgsql';
-- Trigger: deleted_artifact_query on artifact_query
--DROP TRIGGER deleted_artifact_query ON artifact_query;
CREATE TRIGGER deleted_artifact_query
BEFORE DELETE
ON artifact_query
FOR EACH ROW
EXECUTE PROCEDURE fn_deleted_artifact_query();
-----------------------------------------------------------------
-- Table: 9.) deleted_artifact_query_fields
-----------------------------------------------------------------
--DROP TABLE deleted_artifact_query_fields;
CREATE TABLE deleted_artifact_query_fields(
like artifact_query_fields
)
WITH OIDS;
ALTER TABLE deleted_artifact_query_fields OWNER TO postgres;
GRANT ALL ON TABLE deleted_artifact_query_fields TO postgres;
ALTER TABLE deleted_artifact_query_fields ADD PRIMARY KEY (artifact_query_id, query_field_type, query_field_id);
-- Function: fn_deleted_artifact_query_fields
CREATE OR REPLACE FUNCTION fn_deleted_artifact_query_fields()
RETURNS trigger AS
$BODY$
BEGIN
INSERT INTO deleted_artifact_query_fields SELECT OLD.*;
RETURN OLD;
END;
$BODY$
LANGUAGE 'plpgsql';
-- Trigger: deleted_artifact_query_fields on artifact_query_fields
--DROP TRIGGER deleted_artifact_query_fields ON artifact_query_fields;
CREATE TRIGGER deleted_artifact_query_fields
BEFORE DELETE
ON artifact_query_fields
FOR EACH ROW
EXECUTE PROCEDURE fn_deleted_artifact_query_fields();
-----------------------------------------------------------------
-- Table: 10.) deleted_artifact_monitor
-----------------------------------------------------------------
--DROP TABLE deleted_artifact_monitor;
CREATE TABLE deleted_artifact_monitor(
like artifact_monitor
)
WITH OIDS;
ALTER TABLE deleted_artifact_monitor OWNER TO postgres;
GRANT ALL ON TABLE deleted_artifact_monitor TO postgres;
ALTER TABLE deleted_artifact_monitor ADD PRIMARY KEY (artifact_id, user_id);
-- Function: fn_deleted_artifact_monitor
CREATE OR REPLACE FUNCTION fn_deleted_artifact_monitor()
RETURNS trigger AS
$BODY$
BEGIN
INSERT INTO deleted_artifact_monitor SELECT OLD.*;
RETURN OLD;
END;
$BODY$
LANGUAGE 'plpgsql';
-- Trigger: deleted_artifact_monitor on artifact_monitor
--DROP TRIGGER deleted_artifact_monitor ON artifact_monitor;
CREATE TRIGGER deleted_artifact_monitor
BEFORE DELETE
ON artifact_monitor
FOR EACH ROW
EXECUTE PROCEDURE fn_deleted_artifact_monitor();
-----------------------------------------------------------------
-- Table: 11.) deleted_artifact_message
-----------------------------------------------------------------
--DROP TABLE deleted_artifact_message;
CREATE TABLE deleted_artifact_message(
like artifact_message
)
WITH OIDS;
ALTER TABLE deleted_artifact_message OWNER TO postgres;
GRANT ALL ON TABLE deleted_artifact_message TO postgres;
ALTER TABLE deleted_artifact_message ADD PRIMARY KEY (id);
-- Function: fn_deleted_artifact_message
CREATE OR REPLACE FUNCTION fn_deleted_artifact_message()
RETURNS trigger AS
$BODY$
BEGIN
INSERT INTO deleted_artifact_message SELECT OLD.*;
RETURN OLD;
END;
$BODY$
LANGUAGE 'plpgsql';
-- Trigger: deleted_artifact_message on artifact_message
--DROP TRIGGER deleted_artifact_message ON artifact_message;
CREATE TRIGGER deleted_artifact_message
BEFORE DELETE
ON artifact_message
FOR EACH ROW
EXECUTE PROCEDURE fn_deleted_artifact_message();
-----------------------------------------------------------------
-- Table: 12.) deleted_artifact_counts_agg
-----------------------------------------------------------------
--DROP TABLE deleted_artifact_counts_agg;
CREATE TABLE deleted_artifact_counts_agg(
like artifact_counts_agg
)
WITH OIDS;
ALTER TABLE deleted_artifact_counts_agg OWNER TO postgres;
GRANT ALL ON TABLE deleted_artifact_counts_agg TO postgres;
ALTER TABLE deleted_artifact_counts_agg ADD PRIMARY KEY (group_artifact_id);
-- Function: fn_deleted_artifact_counts_agg
CREATE OR REPLACE FUNCTION fn_deleted_artifact_counts_agg()
RETURNS trigger AS
$BODY$
BEGIN
INSERT INTO deleted_artifact_counts_agg SELECT OLD.*;
RETURN OLD;
END;
$BODY$
LANGUAGE 'plpgsql';
-- Trigger: deleted_artifact_counts_agg on artifact_counts_agg
--DROP TRIGGER deleted_artifact_counts_agg ON artifact_counts_agg;
CREATE TRIGGER deleted_artifact_counts_agg
BEFORE DELETE
ON artifact_counts_agg
FOR EACH ROW
EXECUTE PROCEDURE fn_deleted_artifact_counts_agg();
-----------------------------------------------------------------
-- Table: 13.) deleted_artifact
-----------------------------------------------------------------
--DROP TABLE deleted_artifact;
CREATE TABLE deleted_artifact(
like artifact
)
WITH OIDS;
ALTER TABLE deleted_artifact OWNER TO postgres;
GRANT ALL ON TABLE deleted_artifact TO postgres;
ALTER TABLE deleted_artifact ADD PRIMARY KEY (artifact_id);
-- Trigger: deleted_artifact_update_last_modified_date on deleted_artifact
--DROP TRIGGER deleted_artifact_update_last_modified_date ON deleted_artifact;
CREATE TRIGGER deleted_artifact_update_last_modified_date
BEFORE INSERT OR UPDATE
ON deleted_artifact
FOR EACH ROW
EXECUTE PROCEDURE update_last_modified_date();
-- Function: fn_deleted_artifact
CREATE OR REPLACE FUNCTION fn_deleted_artifact()
RETURNS trigger AS
$BODY$
BEGIN
INSERT INTO deleted_artifact SELECT OLD.*;
RETURN OLD;
END;
$BODY$
LANGUAGE 'plpgsql';
-- Trigger: deleted_artifact on artifact
--DROP TRIGGER deleted_artifact ON artifact;
CREATE TRIGGER deleted_artifact
BEFORE DELETE
ON artifact
FOR EACH ROW
EXECUTE PROCEDURE fn_deleted_artifact();
-----------------------------------------------------------------
-- Test Case: I. Archive Deleted Records
-- Precondition 1) Deleted tables have 0 records
-- 2) Artifact tables have N records
-- Postcondition 1) Deleted tables have N records
-- 2) Artifact tables reduced by N records
-- Execution 1) In isolation (from SQL prompt)
-- 2) Through gforge GUI
-----------------------------------------------------------------
-----------------------------------------------------------------
-- Test Case: II. Restore Deleted Records
-- Precondition: 1) Deleted tables have X records
-- 2) Artifact tables have Y records
-- Postcondition 1) Deleted tables have 0 records
-- 2) Artifact tables = X + Y records
-- Execution 1) In isolation (from SQL prompt)
-- 2) Through gforge GUI
-----------------------------------------------------------------
CREATE TABLE testRecordCount (
run_type varchar,
artifact integer NOT NULL,
d_artifact integer NOT NULL,
a_history integer NOT NULL,
d_a_history integer NOT NULL,
a_file integer NOT NULL,
d_a_file integer NOT NULL,
a_extra_field_data integer NOT NULL,
d_a_extra_field_data integer NOT NULL,
a_group_list integer NOT NULL,
d_a_group_list integer NOT NULL,
a_perm integer NOT NULL,
d_a_perm integer NOT NULL,
a_type_monitor integer NOT NULL,
d_a_type_monitor integer NOT NULL,
a_query integer NOT NULL,
d_a_query integer NOT NULL,
a_query_fields integer NOT NULL,
d_a_query_fields integer NOT NULL,
a_monitor integer NOT NULL,
d_a_monitor integer NOT NULL,
a_message integer NOT NULL,
d_a_message integer NOT NULL,
a_counts_agg integer NOT NULL,
d_a_counts_agg integer NOT NULL,
run_date date NOT NULL DEFAULT now()
);
CREATE OR REPLACE FUNCTION populateTestRecordCount (notes varchar, tracker_id int)
RETURNS VOID AS $$
DECLARE
v_artifact int;
v_d_artifact int;
v_a_history int;
v_d_a_history int;
v_a_file int;
v_d_a_file int;
v_a_extra_field_data int;
v_d_a_extra_field_data int;
v_a_group_list int;
v_d_a_group_list int;
v_a_perm int;
v_d_a_perm int;
v_a_type_monitor int;
v_d_a_type_monitor int;
v_a_query int;
v_d_a_query int;
v_a_query_fields int;
v_d_a_query_fields int;
v_a_monitor int;
v_d_a_monitor int;
v_a_message int;
v_d_a_message int;
v_a_counts_agg int;
v_d_a_counts_agg int;
BEGIN
-----------------------------------------------------------------
-- Artifact Tables
-----------------------------------------------------------------
select into v_artifact count(*) from artifact; --where group_artifact_id=tracker_id;
select into v_a_history count(*) from artifact_history;
--where artifact_id in (select artifact_id from artifact where group_artifact_id=tracker_id);
select into v_a_file count(*) from artifact_file;
--where artifact_id in (select artifact_id from artifact where group_artifact_id=tracker_id);
select into v_a_extra_field_data count(*) from artifact_extra_field_data;
--where artifact_id in (select artifact_id from artifact where group_artifact_id=tracker_id);
select into v_a_group_list count(*) from artifact_group_list; --where group_artifact_id=tracker_id;
select into v_a_perm count(*) from artifact_perm; --where group_artifact_id=tracker_id;
select into v_a_type_monitor count(*) from artifact_type_monitor; --where group_artifact_id=tracker_id;
select into v_a_query count(*) from artifact_query; --where group_artifact_id=tracker_id;
select into v_a_query_fields count(*) from artifact_query_fields;
--where artifact_query_id in (select artifact_query_id from artifact_query where group_artifact_id=tracker_id);
select into v_a_monitor count (*) from artifact_monitor;
select into v_a_message count (*) from artifact_message;
select into v_a_counts_agg count (*) from artifact_counts_agg;
-----------------------------------------------------------------
-- Deleted Tables
-----------------------------------------------------------------
select into v_d_artifact count(*) from deleted_artifact where group_artifact_id=tracker_id;
select into v_d_a_history count(*) from deleted_artifact_history where artifact_id in (
select artifact_id from deleted_artifact where group_artifact_id=tracker_id
);
select into v_d_a_file count(*) from deleted_artifact_file where artifact_id in (
select artifact_id from deleted_artifact where group_artifact_id=tracker_id
);
select into v_d_a_extra_field_data count(*) from deleted_artifact_extra_field_data where artifact_id in (
select artifact_id from deleted_artifact where group_artifact_id=tracker_id
);
select into v_d_a_group_list count(*) from deleted_artifact_group_list where group_artifact_id=tracker_id;
select into v_d_a_perm count(*) from deleted_artifact_perm where group_artifact_id=tracker_id;
select into v_d_a_type_monitor count(*) from deleted_artifact_type_monitor where group_artifact_id=tracker_id;
select into v_d_a_query count(*) from deleted_artifact_query where group_artifact_id=tracker_id;
select into v_d_a_query_fields count(*) from deleted_artifact_query_fields where artifact_query_id in (
select artifact_query_id from deleted_artifact_query where group_artifact_id=tracker_id
);
select into v_d_a_monitor count (*) from deleted_artifact_monitor;
select into v_d_a_message count (*) from deleted_artifact_message;
select into v_d_a_counts_agg count (*) from deleted_artifact_counts_agg;
-----------------------------------------------------------------
-- Populate Test Table with Counts
-----------------------------------------------------------------
INSERT INTO testRecordCount (
run_type, artifact, d_artifact, a_history, d_a_history,
a_file, d_a_file, a_extra_field_data, d_a_extra_field_data,
a_group_list, d_a_group_list, a_perm, d_a_perm,
a_type_monitor, d_a_type_monitor, a_query, d_a_query,
a_query_fields, d_a_query_fields, a_monitor, d_a_monitor,
a_message, d_a_message, a_counts_agg, d_a_counts_agg
) VALUES (
notes, v_artifact, v_d_artifact, v_a_history, v_d_a_history,
v_a_file, v_d_a_file, v_a_extra_field_data, v_d_a_extra_field_data,
v_a_group_list, v_d_a_group_list, v_a_perm, v_d_a_perm,
v_a_type_monitor, v_d_a_type_monitor, v_a_query, v_d_a_query,
v_a_query_fields, v_d_a_query_fields, v_a_monitor, v_d_a_monitor,
v_a_message, v_d_a_message, v_a_counts_agg, v_d_a_counts_agg
);
END;
$$ LANGUAGE 'plpgsql';
-----------------------------------------------------------------
-- Test Deleting Records
-----------------------------------------------------------------
CREATE OR REPLACE FUNCTION testRecordDelete (tracker_id int)
RETURNS VOID AS $$
BEGIN
-----------------------------------------------------------------
-- artifact_history, file, and extra_field_data have fk's to artifact
-----------------------------------------------------------------
delete from artifact_history where artifact_id in (
select artifact_id from artifact where group_artifact_id=tracker_id
);
delete from artifact_file where artifact_id in (
select artifact_id from artifact where group_artifact_id=tracker_id
);
delete from artifact_extra_field_data where artifact_id in (
select artifact_id from artifact where group_artifact_id=tracker_id
);
delete from artifact_monitor where artifact_id in (
select artifact_id from artifact where group_artifact_id=tracker_id
);
delete from artifact_message where artifact_id in (
select artifact_id from artifact where group_artifact_id=tracker_id
);
delete from artifact where group_artifact_id=tracker_id;
-----------------------------------------------------------------
-- group_list, perm, type_monitor, counts_agg are straight forward
-----------------------------------------------------------------
delete from artifact_perm where group_artifact_id=tracker_id;
delete from artifact_group_list where group_artifact_id=tracker_id;
delete from artifact_type_monitor where group_artifact_id=tracker_id;
delete from artifact_counts_agg where group_artifact_id=tracker_id;
-----------------------------------------------------------------
-- query_history needs query to turn hamburger back into cow
-----------------------------------------------------------------
delete from artifact_query_fields where artifact_query_id in (
select artifact_query_id from artifact_query where group_artifact_id=tracker_id
);
delete from artifact_query where group_artifact_id=tracker_id;
END;
$$ LANGUAGE 'plpgsql';
-----------------------------------------------------------------
-- Restore Records
-----------------------------------------------------------------
CREATE OR REPLACE FUNCTION RecordRestore (tracker_id int)
RETURNS VOID AS $$
BEGIN
-----------------------------------------------------------------
-- artifact_group_list (disable trigger before restore)
-----------------------------------------------------------------
alter table artifact_group_list disable trigger artifactgrouplist_insert_trig;
insert into artifact_group_list select * from deleted_artifact_group_list where group_artifact_id=tracker_id;
alter table artifact_group_list enable trigger artifactgrouplist_insert_trig;
delete from deleted_artifact_group_list where group_artifact_id=tracker_id;
-----------------------------------------------------------------
-- artifact_query & artifact_query_fields
-----------------------------------------------------------------
insert into artifact_query select * from deleted_artifact_query where group_artifact_id=tracker_id;
insert into artifact_query_fields select * from deleted_artifact_query_fields where artifact_query_id in (
select artifact_query_id from deleted_artifact_query where group_artifact_id=tracker_id
);
delete from deleted_artifact_query_fields where artifact_query_id in (
select artifact_query_id from deleted_artifact_query where group_artifact_id=tracker_id
);
delete from deleted_artifact_query where group_artifact_id=tracker_id;
-----------------------------------------------------------------
-- artifact_perm & artifact_type_monitor
-----------------------------------------------------------------
insert into artifact_counts_agg select * from deleted_artifact_counts_agg where group_artifact_id=tracker_id;
insert into artifact_perm select * from deleted_artifact_perm where group_artifact_id=tracker_id;
insert into artifact_type_monitor select * from deleted_artifact_type_monitor where group_artifact_id=tracker_id;
delete from deleted_artifact_counts_agg where group_artifact_id=tracker_id;
delete from deleted_artifact_perm where group_artifact_id=tracker_id;
delete from deleted_artifact_type_monitor where group_artifact_id=tracker_id;
-----------------------------------------------------------------
-- fish desired records out of deleted_artifact, restore, clean up
-----------------------------------------------------------------
insert into artifact select * from deleted_artifact where group_artifact_id=tracker_id;
insert into artifact_history select * from deleted_artifact_history where artifact_id in (
select artifact_id from deleted_artifact where group_artifact_id=tracker_id
);
insert into artifact_file select * from deleted_artifact_file where artifact_id in (
select artifact_id from deleted_artifact where group_artifact_id=tracker_id
);
insert into artifact_extra_field_data select * from deleted_artifact_extra_field_data where artifact_id in (
select artifact_id from deleted_artifact where group_artifact_id=tracker_id
);
insert into artifact_monitor select * from deleted_artifact_monitor where artifact_id in (
select artifact_id from deleted_artifact where group_artifact_id=tracker_id
);
insert into artifact_message select * from deleted_artifact_message where artifact_id in (
select artifact_id from deleted_artifact where group_artifact_id=tracker_id
);
delete from deleted_artifact_message where artifact_id in (
select artifact_id from deleted_artifact where group_artifact_id=tracker_id
);
delete from deleted_artifact_monitor where artifact_id in (
select artifact_id from deleted_artifact where group_artifact_id=tracker_id
);
delete from deleted_artifact_extra_field_data where artifact_id in (
select artifact_id from deleted_artifact where group_artifact_id=tracker_id
);
delete from deleted_artifact_file where artifact_id in (
select artifact_id from deleted_artifact where group_artifact_id=tracker_id
);
delete from deleted_artifact_history where artifact_id in (
select artifact_id from deleted_artifact where group_artifact_id=tracker_id
);
delete from deleted_artifact where group_artifact_id=tracker_id;
END;
$$ LANGUAGE 'plpgsql';
Date: Tue, 04 Nov 2008 00:41:05 -0500
From: Office of the Provost
Subject: Additional Info on Election Day
To: ANNOUNCE04-L@mail04.gmu.edu
To the Mason Community:
I hear some troubling rumors, so here are a couple of facts: 1. The election is Nov. 4, for all political parties. The notion that one party votes Nov. 5 is UNTRUE. 2. It is also UNTRUE that any student jeopardizes financial aid by voting.
Peter N. Stearns
Provost
Date: Tue, 04 Nov 2008 01:16:42 -0500
From: Office of the Provost
Subject: Election Day Update
To: ANNOUNCE04-L@mail04.gmu.edu
To the Mason Community:
Please note that election day has been moved to November 5th. We apologize for any inconvenience this may cause you.
Peter N. Stearns
Provost
Date: Tue, 04 Nov 2008 08:08:21 -0500
From: Office of the Provost
Subject: Urgent Voting Information
To: PROVOSTOFFICE-L@mail04.gmu.edu
Dear Colleagues,
It has come to my attention early this morning that a message was hacked into the system fraudulently stating that election day has been moved. I am sure everybody realizes this is a hoax, it is also a serious offense and we are looking into it. Please be reminded that election day is today, November 4th.
Peter N. Stearns
Provost
Received: from m154.prod.democracyinaction.org ([8.15.20.154])
by ironport2.gmu.edu with ESMTP; Tue, 04 Nov 2008 01:16:42 -0500
Received: from [10.15.20.114] ([10.15.20.114:39637] helo=web4.mcl.wiredforchange.com)
Kristin: um, again, chick question... but are you mad at me about something? Or is the shortness cause you're wicked busy and I keep interrupting
theAlphaJohn: haha
theAlphaJohn: im on a conference call
theAlphaJohn: just working on stuff in the background
theAlphaJohn: not mad at you at all
Kristin: ok... whew
Kristin: well... I hope you come out tomorrow night
Kristin: haven't seen you in 100 years
Kristin: would be nice to shake it on the dancefloor with you
theAlphaJohn: yeah it's been a while
theAlphaJohn: are you still white?
Kristin: lmao
Kristin: as far as I know
Kristin: I'm still a chick as you can tell
theAlphaJohn: im all asian now
Kristin: really...
theAlphaJohn: i hear yellow fever is the new black
Kristin: LMAO
Kristin: alrighty!
Kristin: does that require surgery?
theAlphaJohn: not much
theAlphaJohn: it's all outpatient
Kristin: oh good...
Kristin: as long as they don't have to remove you nipples and reattach them
theAlphaJohn: then hair dye, spray on tan, and lots of anime / graphic novels (read: comic books for people with masters degrees)
Kristin: omg
theAlphaJohn: would you like me to go back to being terse?
Kristin: NO!
Kristin: that was not a complaint
There are signs of hope, even in this room full of proud, Manhattan Democrats. I can't shake that feeling that some people in here are pulling for me. I'm delighted to see you here tonight, Hillary. Where's Bill, by the way? Can't he take one night off from his tireless quest to make the man who defeated his wife the next President? The man is a relentless advocate for the Obama campaign, and he has a subtle approach to making the case. When a reporter asked him if Senator Obama was qualified to be President, Bill Clinton pointed out, "Sure. He's over 35 years of age and a US citizen". He was pandering to the strict constructionist crowd!
Mayor Adrian M. Fenty said today that the director of the Department of Employment Services has resigned after weeks of turmoil in the city's summer jobs program, which blew its budget by more than $30 million dollars and has been plagued with organizational problems.
[...]
The inspector general initiated an audit of the program last month at the request of Council members Carol Schwartz (R-At Large) and Marion Barry (D-Ward 8). That report is not expected until September.
In the meantime, council members haven't hesitated to express their disapproval and frustration.
Barry, who started the 29-year-old program in his first year as mayor, has spoken out.
"From all accounts . . . this year is the most mismanaged programmatically and financially in the history of this program," Barry said last week.
Dear John,
Thank you for contacting Obama for America and for inviting Senator Barack Obama to your event. Over the course of the campaign, Barack has met with or spoken to hundreds of thousands of Americans at kitchen tables, large rallies, small town hall meetings, and other events in every part of the country. He appreciates the outpouring of support he has received at every stop.
The unprecedented level of campaign activity since early last year speaks to the strong desire of the American people to reclaim their government. We consider every invitation, and Senator Obama values your interest in his candidacy. Due to time constraints, he must decline a large majority of invitations. After careful review, we have determined that Senator Obama will not be able to participate in your event.
We hope that you stay involved and engaged with the campaign, because we need your help. As Barack has said, “if we are willing to work for it, and fight for it, and believe in it, then I am absolutely certain that generations from now, we will be able to look back and tell our children that this was the moment when… we came together to remake this great nation so that it may always reflect our very best selves, and our highest ideals.”
Thank you again for your interest and your understanding, and please accept our best wishes for a successful event.
Sincerely,
Team Scheduling
Obama for America
www.barackobama.com
Kilpatrick's first controversy started as rumors of a wild party in the fall of 2002 involving strippers at the official residence of the mayor—the city-owned Manoogian Mansion. It is alleged by former members of the mayor's Executive Protection Unit that the mayor's wife, Carlita Kilpatrick, came home unexpectedly and upon discovering Kwame with the strippers began to attack one of the women.
Tamara Greene was a 27-year-old exotic dancer who went by the name "Strawberry" and who claimed to have performed at the Manoogian Mansion party. While sitting in her car with her boyfriend, Greene was shot multiple times with a .40 caliber Glock handgun. Although official statement by Detroit Police Department claims that Ms. Greene was shot three times, sources from Homicide Division of DPD have claimed that she was shot 18 times.
In July of 2003, WXYZTV reported that Kwame Kilpatrick was seen riding the streets of Detroit on a Harley-Davidson Electra Glide police motorcycle which was taken from the Detroit Police Motorcycle Squad by Kilpatrick. The report indicated that he at times was riding alone without security, placing himself at risk and that the cycle had been taken by the mayor for his personal use and pleasure.
In 2003, a civil lawsuit was filed against Kilpatrick by his ex-bodyguard Harold Nelthrope and former Deputy Chief Police Gary Brown. The police officers claim they were fired because of an internal probe into the mayor's personal actions and that the firing was a violation of the whistleblower law.[37]
The trial began in August 2007 with Kilpatrick and his chief of staff, Christine Beatty both denying they were involved in an extramarital affair.
In January 2008, The Detroit Free Press examined and revealed the existence of more than 14,000 text messages exchanged between Kilpatrick and his chief of staff Christine Beatty on their city issued SkyTel pagers between September–October 2002 and April–May 2003. The dates are of importance because they encompass the time periods of the alleged Manoogian Mansion party and the ouster of Gary Brown respectively.[54]
The text-messages are the nucleus of an $8.4 million secret deal settlement by the city of Detroit. The attorneys for the city had tried since 2004 to keep the text messages hidden on the basis that they were personal and private communications.[54] However, a city directive re-authorized by Kilpatrick during his first term as mayor indicates that all electronic communication sent on city equipment should be "used in an honest, ethical, and legal manner" and cautions, "is not considered to be personal or private."[55] The mayor's spokesman said the policy only applies to city-owned equipment and the text-messages are exempt since they were sent on a city-leased device.[55]
Kilpatrick and Beatty, both married at the time, did discuss city business; however, many of the series of messages describe not a professional relationship but an extramarital sexual relationship between the two, often in graphic detail. The text messages further describe their use of city funds to arrange romantic getaways, their fears of being caught by the mayor's police protection unit, and evidence the pair conspired to fire Detroit Police Deputy Chief Gary Brown.
On March 24, 2008, Wayne County Prosecutor Kym Worthy announced a 12-count criminal indictment against Kilpatrick and former Detroit Chief of Staff Christine Beatty, charging Kilpatrick with eight felonies and Beatty with seven. Charges for both included perjury, misconduct in office and obstruction of justice. Worthy also suggested that others in the Kilpatrick administration could also be charged.
In 2005, WXYZ-TV reporter Steve Wilson reported that the city had entered an expensive one year lease for a luxury SUV. It was to be used to chauffeur the mayor's family. The lease was for $24,995; five dollars under the amount that would have required the approval of city council. Kilpatrick, chief of staff Christine Beatty, police chief Ella Bully-Cummings, and other members of the mayor's staff all denied that the red Lincoln Navigator was intended to be used by the mayor's wife and children. Eventually, Kilpatrick admitted the Navigator was for his family, claiming he had told the police chief that it was "too much" and to take it back.[64] Media coverage of this story was best known for a situation involving the mayor and his security team. Wilson had tracked Kilpatrick down in Washington, D.C., where he was attending a mayor's conference. When Wilson tried to question Kilpatrick about the Navigator lease, a member of the mayor's security team is seen on camera shoving Wilson against a wall.
On May 8, 2007, WXYZ reported that Kilpatrick used $8,600 from his secret Kilpatrick Civic Fund to take his wife, three sons and babysitter on a week long vacation to a five-star California resort, the La Costa Resort and Spa.[66] The fund, controlled by Kilpatrick's sister and friends, was created to improve the city of Detroit through voter education, economic empowerment and crime prevention. Tax and accounting experts said Kilpatrick's use of the fund was a violation of IRS regulations.[67] The story was also compounded after WXYZ's cameras caught Kilpatrick in a fit of rage grabbing the microphone out of the hand of reporter Ray Sayah and throwing it hard across the room such that it hit a wall, while Sayah tried to question him about the situation.
Kilpatrick was named in a slander lawsuit along with Christine Beatty and police chief Ella Bully-Cummings. The lawsuit was brought about by two police officers that claimed to have been slandered in the media by city officials.[68]
The lawsuit stems from a 2004 incident in which the two police officers pulled over Kilpatrick's chief of staff Christine Beatty for speeding. Beatty was irate at being stopped and bluntly asked the officers, "Do you know who the fuck I am?" when the officers came to the vehicle.[68] While stopped, Beatty called Police Chief Bully-Cummings to have the officers called off, which the officers allege they were ordered to do. When reports of the incident started to surface in the media, Kilpatrick, Beatty and Bully-Cummings all claimed that the traffic stop was some type of "set-up" to harass Beatty.
The Wayne County Election Committee approved a recall petition to remove Kilpatrick as mayor based on the multi-million dollar settlement ($9,000,000+) in a whistle-blower lawsuit against the city, and the accusation that Kilpatrick misled the City Council into approving the settlement. The recall petition was filed by Douglas Johnson, a city council candidate.[71] Kilpatrick has appealed to the commission to reconsider its decision on the grounds that Johnson is not a resident of Detroit.[72] Johnson also requested that Jennifer Granholm use her power as Governor to remove Kilpatrick from office.
On March 12, 2008, at the request of the Mayor's office, Wayne County Election Commission rescinded its earlier approval for the recall. The Mayor's office argued that there was not any evidence that the organizer, Douglas Johnson, actually resided within the city limits of Detroit. Johnson stated that his group would refile using another person whose residency would not be an issue. [73] On March 27, 2008, a second recall petition was filed against Kilpatrick by Angelo Brown. Brown stated in his filing that Kilpatrick is too preoccupied with his legal problems to be effective. Kilpatrick's spokesman James Canning again dismissed this latest recall by saying: "It’s Mr. Brown’s right to file a petition, but it’s just another effort by a political hopeful to grab headlines."[74]
On May 14 the Detroit City Council voted to request that the governor of Michigan, Jennifer Granholm, remove Kilpatrick from office.
DETROIT — Mayor Kwame M. Kilpatrick, already fighting eight felony charges including perjury, was charged Friday with two felony counts of assaulting or obstructing a police officer. The officer, a sheriff’s deputy, was attempting to serve a subpoena.
Michigan’s attorney general, Mike Cox, announced the new charges one day after Mr. Kilpatrick was sent to jail for violating the terms of his bond by traveling to Canada in July on city business. Each count carries a penalty of up to two years in prison or a $2,000 fine upon a conviction.
“It’s a very straightforward, simple case,” Mr. Cox said. “I cannot recall ever seeing — let alone hearing of — a situation where a police officer trying to serve a subpoena was assaulted.”
Moments before Mr. Cox’s announcement, a circuit court judge, Thomas E. Jackson, allowed the mayor to be released from jail after posting a $50,000 cash bond. He also took away the mayor’s travel privileges and ordered him to wear a global-positioning tether.
But Mr. Kilpatrick, 38, who is in his second term as mayor, could soon be headed back to jail, as assault charges would be another bond violation.
The incident that prompted the new charges happened July 24, a day after Mr. Kilpatrick traveled across the Detroit River to Windsor, Ontario, on city business without court approval, a violation of the terms of his bond in the perjury case. That violation is what prompted Judge Ronald Giles of the 36th District Court in Detroit to have Mr. Kilpatrick sent to the county jail Thursday.
In his Park Avenue corner suite at Cerberus Global Investments, Dan Quayle recalled the moment he learned how much his old job had changed. Cheney had just taken the oath of office, and Quayle paid a visit to offer advice from one vice president to another.
"I said, 'Dick, you know, you're going to be doing a lot of this international traveling, you're going to be doing all this political fundraising . . . you'll be going to the funerals,' " Quayle said in an interview earlier this year. "I mean, this is what vice presidents do. I said, 'We've all done it.' "
Cheney "got that little smile," Quayle said, and replied, "I have a different understanding with the president."
"He had the understanding with President Bush that he would be -- I'm just going to use the word 'surrogate chief of staff,' " said Quayle, whose membership on the Defense Policy Board gave him regular occasion to see Cheney privately over the following four years.
In expanding presidential power, Cheney's foremost agent was David S. Addington, his formidable general counsel and legal adviser of many years. On the morning of Sept. 11, Addington was evacuated from the Eisenhower Executive Office Building next to the White House and began to make his way toward his Virginia home on foot. As he neared the Arlington Memorial Bridge, someone in the White House reached him with a message: Turn around. The vice president needs you.
Down in the bunker, according to a colleague with firsthand knowledge, Cheney and Addington began contemplating the founding question of the legal revolution to come: What extraordinary powers will the president need for his response?
Before the day ended, Cheney's lawyer joined forces with Timothy E. Flanigan, the deputy White House counsel, linked by secure video from the Situation Room. Flanigan patched in John C. Yoo at the Justice Department's fourth-floor command center. White House counsel Alberto R. Gonzales joined later.
Three days after the Ashcroft meeting, Cheney brought the order for military commissions to Bush. No one told Bellinger, Rice or Powell, who continued to think that Prosper's working group was at the helm.
After leaving Bush's private dining room, the vice president took no chances on a last-minute objection. He sent the order on a swift path to execution that left no sign of his role. After Addington and Flanigan, the text passed to Berenson, the associate White House counsel. Cheney's link to the document broke there: Berenson was not told of its provenance.
Berenson rushed the order to deputy staff secretary Stuart W. Bowen Jr., bearing instructions to prepare it for signature immediately -- without advance distribution to the president's top advisers. Bowen objected, he told colleagues later, saying he had handled thousands of presidential documents without ever bypassing strict procedures of coordination and review. He relented, one White House official said, only after "rapid, urgent persuasion" that Bush was standing by to sign and that the order was too sensitive to delay. [Read the order]
NEW YORK (AP) -- Looking to bring more value-seeking consumers through its doors for a late afternoon caffeine fix, Starbucks Corp. said it will now offer its morning customers any iced grande beverage for $2 after 2 p.m.
The price is a big cut from the normal price of most grande-sized iced drinks. A grande iced latte, for example, costs about $4. To get the discount, customers must present a receipt from their morning Starbucks (SBUX, Fortune 500) visit.
The promotion was previously only offered in Seattle, Chicago and Miami. The company said it is taking it nationwide beginning Tuesday to answer consumers' calls for more value at the chain, which has seen traffic drop as gas prices rise and consumer spending falters. It runs until Sept. 2.
"I think we've kind of hit the nail on the head," said Brad Stevens, vice president of customer relationship management. "It's easy for baristas to implement and it's easy for customers to understand."
My DJ Event At Palma Club In Baltimore:Music,Fights,Cops,And Corruption.+Pics.
So i DJ'ed at the new Palma nightclub here in baltimore this past saturday.The event was being put on by a friend of mine.The party was an asian party(although anyone was allowed to come)and i am to dj from 9 to 11pm.No problem.I arrive at 7:30 to check soundlevels and to see if their is any problems with the equipment or learn how to work the mixer if need be.
I arrive and they are just starting to work on the speakers,wiring then in and such.Why they didnt do this days ago is beyond me but whatever.Shoudnt take long these guys are pros right? 7:30 turns into 8:30.Then 9.Now were open.People are starting to come in.Then 9:30.Uh oh.Finally at 9:40 they figure it all out and i go on.
Now,i have been promised a 2 hour set no matter what.So i figure im playing from 9:40 to 11:40.Well one of the other promoters wants the hip hop dj to go on at 11.My friend steve tells me this and although im not happy about it,i can always leave here and go see Blank and Jones in D.C.The friends i brought all want to do this so im like screw it lets go.I tell steve if im not spinning im leaving. Were getting ready to leave....
Just one problem.The other DJ is a friend of steve and mine that steve brought in to play.He hasnt really done a show like this,hes completely nervous and he doesnt even think hes brought enough music for the event.Now I knew this would happen ahead of time(dont ask me how i just knew)so i took the liberty to bring more then enough hip hop music to give steve to give to him if this happened.I also brought him a set of headphones(once again dont ask!).
Now i really dont want to leave any of my music or equipment behind but i dont exactly want to stay either.My friends are ready to go.Am I comin? Whats the holdup?Decisions,Decisions.Well before i can make up my mind about it my friend turns to me and says:"Dude you GOTTA stay man!!I dont know what im doing just yet,and i dont think i have enough music.""You gotta stay and help me!!"
*SIGH*.I mean, i cant exactly leave after a speech like that now can i?So i tell my other friends im staying and some leave and some stay.I tell my main friend and roomie im gonna stay and help the other dj out,so lets just get drunk on the free bar tab i have till we can barely stand!So now,ive become hip hop dj AtomX.WORD.
Not that i dont like hip hop ive Dj'ed it in the past at partys as a favor to some people but i play dance music.But the crowd is getting really strong and theres 3 half naked go go girls dancing on the dj booth speakers so might as well have some fun with this!
Now Heres where staying starts to become worth it(if your in to chaotic scenes like i am)A guy steve and i know is so drunk he can barely stand.They try to get him to leave and hes not going.Security from upstairs shows up and they want to try to throw him out the old fashioned way.With brute force.
What these guys dont realize is that their only making it worse.Let asian friends throw out asian friends(and me the token white guy since i know him).Only if a brawl breaks out if when we would need these guys.Plus they are far outnumbered by about 200 asian guys who will stomp them into the ground if they touch this guy.I try to explain that well take care of it and their giving me an attitude about it,but all the while were getting him out of the club.At this point im now AtomX the bouncer.GRR.
We get him out in to the street and he starts bumping into everybody outside and almost falls into traffic.Well obviously the police are outside and they show up and call for backup.The cop is like"GET HIM OUTA HERE OR HES GOING TO JAIL"I told the officer do what they had to do because at this point he was starting to get out of control.
Just as i figure hes going to jail a car pulls up and the back door opens.We toss him in head first and slam the door and the car roars off.Problem solved.Still not a bad night.Only one little skirmish.Its now 2am.Im told to get on the mike and tell people were open till 3.Keep partyng!
All of the sudden at 230am the bouncers come downstairs and say to me "SHUT IT DOWN NOW!"SHUT IT DOWN WERE CLOSED!" And start ushering everyone out.My friend steve doesnt know whats doing on,i dont know whats going on,No one knows.We were told 3am.What gives???
Well What gave is that some retired punk from the liquor board showed up drunk and expected to get his drinks comped.When he was refused and asked to leave he demanded to see The security's staff paperwork along with other paperwork the club is supposed to have.When they refused he called the police.Apparently he was well connected with the corrupt politicians in baltimore(which is pretty much all of them) and about 10 cops showed up.This guy says"I WANT YOU OFFICERS TO GET EVRYONES NAME AND LICENSES IN THIS CLUB RIGHT NOW".Unbelievably the cops started doing it.He was in complete control.(Of course i gave them nothing.I simply walked past them and out the front door.NO INFO FOR YOU!
The guys who run this club are from D.C.And while im sure theres a whole different kind of bribing that goes on there,its nothing like the corruption levels that baltimore has.Trust me.If you dont give someone what they want here they will shut you down.And you have no say in it.
WELL! All in all it was a fun night and Palma actually is really nice inside.But i dont know how long this club will last unless they get more people to come out.They need to start promoting more in dc and the surrounding locations for sure.But they do have a nice line up of famous dj's coming so lets hope that on top of getting more patrons they grease enough palms and bribe enough losers down here to stay open!Thanks for reading.
House Dems turn out the lights but GOP keeps talking
Speaker Nancy Pelosi (D-Calif.) and the Democrats adjourned the House and turned off the lights and killed the microphones, but Republicans are still on the floor talking gas prices.
Minority Leader John Boehner (R-Ohio) and other GOP leaders opposed the motion to adjourn the House, arguing that Pelosi's refusal to schedule a vote allowing offshore drilling is hurting the American economy. They have refused to leave the floor after the adjournment motion passed at 11:23 a.m. and are busy bashing Pelosi and her fellow Democrats for leaving town for the August recess.
At one point, the lights went off in the House and the microphones were turned off in the chamber, meaning Republicans were talking in the dark. But as Rep. John Shadegg (R-Ariz..) was speaking, the lights went back on, and the microphones were turned on shortly afterward.
But C-SPAN, which has no control over the cameras in the chamber, has stopped broadcasting the House floor, meaning no one is witnessing this except the assembled Republicans, their aides, and one Democrat, Rep. Dennis Kucinich (D-Ohio), who has now left.
McCain Campaign Says Obama Is ‘Playing the Race Card’
Updated RACINE, Wis. – Senator John McCain’s campaign accused Barack Obama of playing “the race card’’ on Thursday, citing his remarks that Republicans would try to scare voters by pointing out he “doesn’t look like all those other presidents on the dollar bills.’’
“Barack Obama has played the race card, and he played it from the bottom of the deck,’’ Rick Davis, Mr. McCain’s campaign manager, said in a statement. “It’s divisive, negative, shameful and wrong.’’
Mr. Davis was alluding to comments that Mr. Obama made Wednesday in Missouri when he reacted to the increasingly negative tone, and negative ads that have been coming his way from the McCain campaign in recent days.
“So nobody really thinks that Bush or McCain have a real answer for the challenges we face, so what they’re going to try to do is make you scared of me,’’ Mr. Obama said Wednesday in Springfield, Mo., in remarks that he echoed throughout the day. “You know, he’s not patriotic enough. He’s got a funny name. You know, he doesn’t look like all those other Presidents on those dollar bills, you know. He’s risky. That’s essentially the argument they’re making.’’
The McCain campaign’s decision to make the charge now that Mr. Obama was playing the “race card” comes as it has adopted a far more aggressive, negative posture towards Mr. Obama in recent days, trying to tar him as arrogant, out of touch and unprepared for the presidency with a series of statements by Mr. McCain and a series of negative ads – some of which have been condemned as misleading.
Senator Obama is invited to join our friends and family to celebrate my college graduation, an event 12 years in the making. Senator Obama might enjoy a different perspective of urban America: a man who moved to the DC region at the age of 20 to work full time and go to school part time. Sometimes, the American dream means contracting in the Office of Administration during the Clinton Administration, and several other high tech jobs to afford a home at the top of the housing market, only to watch it lose 30% of its value in two years. Despite that, one can work full time, go to school part time, and live the American dream just outside the beltway in Tim Caine's Virginia.
Republicans (especially those indicted for accepting bribes or whom violated US civil service laws) will not be admitted.
Dear John:
Thank you so much for your invitation. Your scheduling request is now in our system and you will be contacted as soon as we know more about Barack's availability.
Please keep in mind that the scheduling team may not be able to determine his availability until 1-2 months before the date of your event. We understand the difficulties this may cause and certainly appreciate your patience.
If you need to follow-up on your invitation before you hear back from us, please call 312/819-2419. Please do not submit follow-up inquiries through the online form or via email.
Thanks again for including Barack in your plans. We'll be in touch!
Team Scheduling
Obama for America
http://www.barackobama.com
WASHINGTON — Senator Ted Stevens of Alaska, the longest-serving Republican senator in United States history and a figure of great influence in Washington as well as in his home state, has been indicted on federal charges of failing to report gifts and income.
Mr. Stevens, 84, was indicted on seven felony counts related to renovations on his home in Alaska. The charges arise from an investigation that has been under way for more than a year, in connection with the senator’s relationship with a businessman who oversaw the home-remodeling project.
Senior aides to former Attorney General Alberto R. Gonzales broke Civil Service laws by using politics to guide their hiring decisions, picking less-qualified applicants for important nonpolitical positions, slowing the hiring process at critical times and damaging the department’s credibility, an internal report concluded on Monday.
A longtime prosecutor who drew rave reviews from his supervisors was passed over for an important counterterrorism slot because his wife was active in Democratic politics, and a much-less-experienced lawyer with Republican leanings got the job, the report said.
Another prosecutor was rejected for a job in part because she was thought to be a lesbian. And a Republican lawyer received high marks at his job interview because he was found to be sufficiently conservative on the core issues of “god, guns + gays.”