#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to you under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# Database of contributors to Apache Calcite.
# Pages such as developer.md use this data.
# List must be sorted by first name, last name.
#
- name: Alan Gates
  emeritus: 2018/05/04
  apacheId: gates
  githubId: alanfgates
  org: Hortonworks
  role: PMC
- name: Aman Sinha
  apacheId: amansinha
  githubId: amansinha100
  org: MapR
  role: PMC
- name: Andrei Sereda
  apacheId: sereda
  githubId: asereda-gs
  org:
  role: Committer
- name: Ashutosh Chauhan
  apacheId: hashutosh
  githubId: ashutoshc
  org: Hortonworks
  role: PMC
- name: Chris Baynes
  apacheId: cbaynes
  githubId: chris-baynes
  org: Contiamo
  role: Committer
- name: Christian Beikov
  apacheId: cbeikov
  githubId: beikov
  org: Blazebit
  role: Committer
- name: Chunwei Lei
  apacheId: chunwei
  githubId: chunweilei
  org: Alibaba
  role: Committer
- name: Danny Chan
  apacheId: danny0405
  githubId: danny0405
  org: Alibaba
  role: PMC
- name: Edmon Begoli
  apacheId: ebegoli
  githubId: ebegoli
  org: Oak Ridge National Laboratory
  role: Committer
- name: Feng Zhu
  apacheId: fengzhu
  githubId: DonnyZone
  org: Tencent
  role: Committer
- name: Forward Xu
  apacheId: forwardxu
  githubId: XuQianJin-Stars
  org: Tencent
  role: Committer
- name: Francis Chuang
  apacheId: francischuang
  githubId: F21
  org: Boostport
  role: PMC
- name: Gian Merlino
  apacheId: gian
  githubId: gianm
  org: Imply
  role: Committer
- name: Haisheng Yuan
  apacheId: hyuan
  githubId: hsyuan
  org: Alibaba
  role: PMC
- name: Hongze Zhang
  apacheId: hongze
  githubId: zhztheplayer
  org: Tencent
  role: Committer
- name: James R. Taylor
  apacheId: jamestaylor
  githubId: JamesRTaylor
  org: Salesforce
  role: PMC
- name: Jacques Nadeau
  apacheId: jacques
  githubId: jacques-n
  org: Dremio
  role: PMC
- name: Jess Balint
  apacheId: jbalint
  githubId: jbalint
  org: Stardog
  role: Committer
- name: Jesús Camacho Rodríguez
  apacheId: jcamacho
  githubId: jcamachor
  org: Hortonworks
  role: PMC
- name: Jinfeng Ni
  apacheId: jni
  githubId: jinfengni
  org: MapR
  role: PMC
- name: Jin Xing
  apacheId: jinxing
  githubId: jinxing64
  org: Ant Financial
  role: Committer
- name: John Pullokkaran
  apacheId: jpullokk
  githubId: jpullokkaran
  org: Hortonworks
  role: PMC
- name: Josh Elser
  apacheId: elserj
  githubId: joshelser
  org: Hortonworks
  role: PMC
- name: Julian Feinauer
  apacheId: jfeinauer
  githubId: JulianFeinauer
  org: Pragmatic Minds
  role: Committer
- name: Julian Hyde
  apacheId: jhyde
  githubId: julianhyde
  org: Looker
  role: PMC
  homepage: http://people.apache.org/~jhyde
- name: Kevin Liew
  apacheId: kliew
  githubId: kliewkliew
  org:
  role: Committer
- name: Kevin Risden
  apacheId: krisden
  githubId: risdenk
  org:
  role: PMC
- name: Laurent Goujon
  apacheId: laurent
  githubId: laurentgo
  org: Dremio
  role: PMC
- name: Maryann Xue
  apacheId: maryannxue
  githubId: maryannxue
  org: Intel
  role: PMC
- name: Michael Mior
  apacheId: mmior
  githubId: michaelmior
  org: Rochester Institute of Technology
  role: PMC
  homepage: https://michael.mior.ca/
- name: Milinda Pathirage
  apacheId: milinda
  githubId: milinda
  org: Indiana University
  role: Committer
  homepage: http://milinda.pathirage.org/
- name: MinJi Kim
  apacheId: minji
  githubId: minji-kim
  org: Oracle
  role: Committer
- name: Muhammad Gelbana
  apacheId: mgelbana
  githubId: MGelbana
  org: Incorta
  role: Committer
- name: Nick Dimiduk
  apacheId: ndimiduk
  githubId: ndimiduk
  org:
  role: PMC
  homepage: http://www.n10k.com
- name: Nishant Bangarwa
  apacheId: nishant
  githubId: nishantmonu51
  org: Hortonworks
  role: Committer
- name: Ruben Quesada Lopez
  apacheId: rubenql
  githubId: rubenada
  org: TIBCO
  role: Committer
- name: Sergey Nuyanzin
  apacheId: snuyanzin
  githubId: snuyanzin
  org: EPAM
  role: Committer
- name: Shuyi Chen
  apacheId: shuyichen
  githubId: suez1224
  org: Uber
  role: Committer
- name: Slim Bouguerra
  apacheId: bslim
  githubId: b-slim
  org: Hortonworks
  role: Committer
- name: Stamatis Zampetakis
  apacheId: zabetak
  githubId: zabetak
  org: Cloudera
  role: PMC Chair
  homepage: https://people.apache.org/~zabetak/
- name: Steven Noels
  apacheId: stevenn
  githubId: stevenn
  org: NGData
  role: PMC
- name: Ted Dunning
  apacheId: tdunning
  githubId: tdunning
  org: MapR
  role: PMC
  avatar: https://mapr.com/blog/author/ted-dunning/assets/tdunning-panama.jpg
- name: Vineet Garg
  apacheId: vgarg
  githubId: vineetgarg02
  org: Cloudera
  role: Committer
- name: Vladimir Sitnikov
  apacheId: vladimirsitnikov
  githubId: vlsi
  org: NetCracker
  role: PMC
- name: Volodymyr Vysotskyi
  apacheId: volodymyr
  githubId: vvysotskyi
  org:
  role: PMC
- name: Wang Yanlin
  apacheId: yanlin
  githubId: yanlin-Lynn
  org: Ant Financial
  role: Committer
- name: Zhen Wang
  apacheId: zhenw
  githubId: zinking
  org:
  role: Committer
- name: Zhiqiang He
  apacheId: zhiqianghe
  githubId: Zhiqiang-He
  org: Huawei
  role: Committer
- name: Zhiwei Peng
  apacheId: zhiwei
  githubId: pengzhiwei2018
  org: Ant Financial Group
  role: Committer
- name: Zoltan Haindrich
  apacheId: kgyrtkirk
  githubId: kgyrtkirk
  org: Hortonworks
  role: Committer
# End contributors.yml
