%% ``The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in %% compliance with the License. You should have received a copy of the %% Erlang Public License along with this software. If not, it can be %% retrieved via the world wide web at http://www.erlang.org/. %% %% Software distributed under the License is distributed on an "AS IS" %% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See %% the License for the specific language governing rights and limitations %% under the License. %% %% The Initial Developer of the Original Code is Ericsson Utvecklings AB. %% Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings %% AB. All Rights Reserved.'' %% %% $Id$ %% -module(company_o). -compile(export_all). -import(mnesia, [transaction/1]). %0 -include_lib("stdlib/include/qlc.hrl"). -include("company_o.hrl"). sinit() -> mnesia:create_schema([node()]). init() -> mnesia:create_table(employee, [{attributes, record_info(fields, employee)}]), mnesia:create_table(dept, [{attributes, record_info(fields, dept)}]), mnesia:create_table(project, [{attributes, record_info(fields, project)}]). %0 %1 insert_emp(Emp, DeptId, ProjNames) -> Fun = fun() -> mnesia:write(Emp#employee{dept = DeptId, projects = ProjNames}) end, mnesia:transaction(Fun). %1 %2 females() -> F = fun() -> Q = qlc:q([E#employee.name || E <- mnesia:table(employee), E#employee.sex == female]), qlc:e(Q) end, mnesia:transaction(F). %2 %3 female_bosses() -> F = fun() -> qlc:e(qlc:q( [{E#employee.name, Boss#employee.name} || E <- mnesia:table(employee), Boss <- mnesia:table(employee), Boss#employee.emp_no == E#employee.manager, E#employee.sex == female] )) end, mnesia:transaction(F). %4 raise_females(Amount) -> F = fun() -> Q = qlc:q([E || E <- mnesia:table(employee), E#employee.sex == female]), Fs = qlc:e(Q), over_write(Fs, Amount) end, mnesia:transaction(F). over_write([E|Tail], Amount) -> Salary = E#employee.salary + Amount, New = E#employee{salary = Salary}, mnesia:write(New), 1 + over_write(Tail, Amount); over_write([], _) -> 0. %4 %5 raise(Eno, Raise) -> F = fun() -> [E] = mnesia:read({employee, Eno}), Salary = E#employee.salary + Raise, New = E#employee{salary = Salary}, mnesia:write(New) end, mnesia:transaction(F). %5 %6 bad_raise(Eno, Raise) -> F = fun() -> [E] = mnesia:read({employee, Eno}), Salary = E#employee.salary + Raise, New = E#employee{salary = Salary}, io:format("Trying to write ... ~n", []), mnesia:write(New) end, mnesia:transaction(F). %6 %9 get_emps(Salary, Dep) -> Q = qlc:q( [E || E <- mnesia:table(employee), E#employee.salary > Salary, E#employee.dept == Dep] ), F = fun() -> qlc:e(Q) end, transaction(F). %9 %10 get_emps2(Salary, Dep) -> Epat0 = mnesia:table_info(employee, wild_pattern), Epat = Epat0#employee{dept = Dep}, F = fun() -> All = mnesia:match_object(Epat), [E || E <-All, E#employee.salary > Salary ] end, mnesia:transaction(F). %10